private void CompleteReceiveFrom(SocketAsyncEventArgs args) { PacketReadToken token = (PacketReadToken)args.UserToken; byte[] receiveBuffer = args.Buffer; switch (args.SocketError) { case SocketError.Success: receiveBuffer.CopyTo(token.UserBuffer); token.CompletionSource.SetResult(args.BytesTransferred); break; case SocketError.OperationAborted: token.CompletionSource.SetCanceled(); break; default: token.CompletionSource.SetException(new SocketException((int)args.SocketError)); break; } BufferPool.Return(receiveBuffer, true); ArgsPool.Return(args); }