Exemple #1
0
        internal void ProcessReceive(SocketAsyncEventArgs receiveEventArgs)
        {
            TCPUserToken token = ( TCPUserToken )receiveEventArgs.UserToken;

            if (receiveEventArgs.SocketError != SocketError.Success)
            {
                token.MarkToDisconnect($"Receive error, remote endpoint: {token.remoteEndPoint}",
                                       receiveEventArgs.SocketError);
                return;
            }
            int size = receiveEventArgs.BytesTransferred;

            if (size == 0)
            {
                token.MarkToDisconnect($"Receive zero bytes, remote endpoint: {token.remoteEndPoint}", SocketError.NoData);
                return;
            }
            lock (this._receivedDatas)
            {
                if (this._socket != null)
                {
                    token.CacheData(receiveEventArgs.Buffer, receiveEventArgs.Offset, receiveEventArgs.BytesTransferred);
                    this._receivedDatas.Push(new ReceivedData(token));
                }
            }
            this.StartReceive(token);
        }
Exemple #2
0
        private void CheckClientOverRange()
        {
            int over = this._tokens.Count - this._maxClient;

            for (int i = 0; i < over; i++)
            {
                TCPUserToken token = this._tokens[this._tokens.Count - 1];
                token.MarkToDisconnect($"Client overrange, remote endpoint: {token.remoteEndPoint}",
                                       SocketError.SocketError);
            }
        }
Exemple #3
0
        private void StartReceive(TCPUserToken token)
        {
            bool asyncResult;

            try
            {
                asyncResult = token.ReceiveAsync(token.receiveEventArgs);
            }
            catch (ObjectDisposedException)
            {
                return;
            }
            catch (SocketException e)
            {
                token.MarkToDisconnect($"Receive error:{e}, remote endpoint: {token.remoteEndPoint}", e.SocketErrorCode);
                return;
            }
            if (!asyncResult)
            {
                this.ProcessReceive(token.receiveEventArgs);
            }
        }