private void ProcessRecieve(SocketAsyncEventArgs args) { try { var bytesReceived = args.BytesTransferred; if (bytesReceived == 0) //if (args.SocketError != SocketError.Success) { // no bytes means the client disconnected, so clean up! _server.DisconnectClient(this, true); } else { // increment our counters unchecked { _bytesReceived += (uint)bytesReceived; } Interlocked.Add(ref _totalBytesReceived, bytesReceived); _remainingLength += bytesReceived; if (OnReceive(_bufferSegment)) { // packet processed entirely _offset = 0; _remainingLength = 0; _bufferSegment.DecrementUsage(); _bufferSegment = Buffers.CheckOut(); } else { EnsureBuffer(); } ResumeReceive(); } } catch (ObjectDisposedException) { _server.DisconnectClient(this, true); } catch (Exception e) { _server.Warning(this, e); _server.DisconnectClient(this, true); } finally { args.Completed -= ReceiveAsyncComplete; SocketHelpers.ReleaseSocketArg(args); } }
private void ProcessRecieve(SocketAsyncEventArgs args) { try { int bytesTransferred = args.BytesTransferred; if (bytesTransferred == 0) { _server.DisconnectClient(this, true, false); } else { _bytesReceived += (uint)bytesTransferred; Interlocked.Add(ref _totalBytesReceived, bytesTransferred); _remainingLength += bytesTransferred; if (_remainingLength > 6) { OnReceive(); } ResumeReceive(); } } catch (ObjectDisposedException ex) { _server.DisconnectClient(this, true, false); } catch (Exception ex) { _server.Warning(this, ex); _server.DisconnectClient(this, true, false); } finally { args.Completed -= ReceiveAsyncComplete; SocketHelpers.ReleaseSocketArg(args); } }