System.Net.ConnectStream.WriteHeadersCallback C# (CSharp) Method

WriteHeadersCallback() private static method

private static WriteHeadersCallback ( IAsyncResult ar ) : void
ar IAsyncResult
return void
        private static void WriteHeadersCallback(IAsyncResult ar)
        {
            if(ar.CompletedSynchronously){
                return;
            }

            WriteHeadersCallbackState state = (WriteHeadersCallbackState)ar.AsyncState;
            ConnectStream stream = state.stream;
            HttpWebRequest request = state.request;
            WebExceptionStatus error = WebExceptionStatus.SendFailure;

            //m_Request.writebuffer may be set to null on resubmit before method exits
            byte[] writeBuffer = request.WriteBuffer;

            GlobalLog.Enter("ConnectStream#" + ValidationHelper.HashString(stream) + "::WriteHeadersCallback", "Connection#" + ValidationHelper.HashString(stream.m_Connection) + ", " + writeBuffer.Length.ToString());

            try{
                stream.m_Connection.EndWrite(ar);
                stream.m_Connection.CheckStartReceive(request);
                error = WebExceptionStatus.Success;
            }
            catch (Exception e){
                if (NclUtilities.IsFatal(e)) throw;

                GlobalLog.Print("ConnectStream#" + ValidationHelper.HashString(stream) + "::WriteHeaders Exception: "+e.ToString());

                if (e is IOException || e is ObjectDisposedException)
                {
                    //new connection but reset from server on inital send
                    if(!stream.m_Connection.AtLeastOneResponseReceived && !request.BodyStarted){
                        e = new WebException(
                            NetRes.GetWebStatusString("net_connclosed", error),
                            error,
                            WebExceptionInternalStatus.Recoverable,
                            e);
                    }
                    else{
                        e = new WebException(
                            NetRes.GetWebStatusString("net_connclosed", error),
                            error,
                            stream.m_Connection.AtLeastOneResponseReceived ? WebExceptionInternalStatus.Isolated : WebExceptionInternalStatus.RequestFatal,
                            e);
                    }
                }

                stream.IOError(e, false);
            }

            stream.ExchangeCallNesting(Nesting.Idle, Nesting.InternalIO);

            request.WriteHeadersCallback(error, stream, true);
            GlobalLog.Leave("ConnectStream#" + ValidationHelper.HashString(stream) + "::WriteHeadersCallback",writeBuffer.Length.ToString());
        }