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); }
private void CheckClientOverRange() { int over = this._tokenManager.count - this._maxClient; for (int i = 0; i < over; i++) { TCPUserToken token = this._tokenManager[this._tokenManager.count - 1]; token.MarkToDisconnect($"Client overrange, remote endpoint: {token.remoteEndPoint}", SocketError.SocketError); } }
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); } }