Ejemplo n.º 1
0
        private void TryDequeueAndPostSend(ExSocket socket, SocketAsyncEventArgs ioEventArgs)
        {
            bool isOwner = ioEventArgs == null;

            byte[] data;
            if (socket.TryDequeue(out data))
            {
                if (ioEventArgs == null)
                {
                    ioEventArgs = ioEventArgsPool.Pop();
                    ioEventArgs.AcceptSocket = socket.WorkSocket;
                }
                DataToken dataToken = (DataToken)ioEventArgs.UserToken;
                dataToken.Socket = socket;
                dataToken.byteArrayForMessage = data;
                dataToken.messageLength       = data.Length;
                try
                {
                    PostSend(ioEventArgs);
                }
                catch
                {
                    if (isOwner)
                    {
                        ReleaseIOEventArgs(ioEventArgs);
                    }
                    throw;
                }
            }
            else
            {
                ReleaseIOEventArgs(ioEventArgs);
                socket.ResetSendFlag();
            }
        }
Ejemplo n.º 2
0
 private void PostAccept()
 {
     try
     {
         if (!_isStart)
         {
             return;
         }
         SocketAsyncEventArgs acceptEventArgs = acceptEventArgsPool.Pop() ?? CreateAcceptEventArgs();
         bool willRaiseEvent = listenSocket.AcceptAsync(acceptEventArgs);
         if (!willRaiseEvent)
         {
             ProcessAccept(acceptEventArgs);
         }
     }
     catch (Exception ex)
     {
         TraceLog.WriteError("Post accept listen error:{0}", ex);
     }
 }
Ejemplo n.º 3
0
        private void TryDequeueAndPostSend(ExSocket socket, SocketAsyncEventArgs ioEventArgs)
        {
            bool isOwner = ioEventArgs == null;
            SocketAsyncResult result;

            if (socket.TryDequeue(out result))
            {
                if (ioEventArgs == null)
                {
                    ioEventArgs = ioEventArgsPool.Pop();
                    ioEventArgs.AcceptSocket = socket.WorkSocket;
                }
                DataToken dataToken = (DataToken)ioEventArgs.UserToken;
                dataToken.Socket              = socket;
                dataToken.AsyncResult         = result;
                dataToken.byteArrayForMessage = result.Data;
                dataToken.messageLength       = result.Data.Length;
                try
                {
                    PostSend(ioEventArgs);
                }
                catch (Exception ex)
                {
                    dataToken.ResultCallback(ResultCode.Error, ex);
                    if (isOwner)
                    {
                        ReleaseIOEventArgs(ioEventArgs);
                    }
                    socket.ResetSendFlag();
                }
            }
            else
            {
                ReleaseIOEventArgs(ioEventArgs);
                socket.ResetSendFlag();
            }
        }
Ejemplo n.º 4
0
        private void DisposeAllSaeaObjects()
        {
            SocketAsyncEventArgs eventArgs;

            while (this.acceptEventArgsPool.Count > 0)
            {
                eventArgs = acceptEventArgsPool.Pop();
                ResetSAEAObject(eventArgs);
            }
            while (this.ioEventArgsPool.Count > 0)
            {
                eventArgs = ioEventArgsPool.Pop();
                ResetSAEAObject(eventArgs);
            }
        }