private void StartSend(ClientSocketAsyncEventArgs clientSocketAsyncEventArgs) { clientSocketAsyncEventArgs.IOEvent.WaitOne(); clientSocketAsyncEventArgs.Status = SocketStatus.Sending; if (clientSocketAsyncEventArgs.SendBytesRemainingCount <= this.Settings.BufferSize) { clientSocketAsyncEventArgs.SetBuffer(clientSocketAsyncEventArgs.BufferOffsetSend, clientSocketAsyncEventArgs.SendBytesRemainingCount); Buffer.BlockCopy(clientSocketAsyncEventArgs.DataToSend, clientSocketAsyncEventArgs.BytesSentAlreadyCount, clientSocketAsyncEventArgs.Buffer, clientSocketAsyncEventArgs.BufferOffsetSend, clientSocketAsyncEventArgs.SendBytesRemainingCount); } else { clientSocketAsyncEventArgs.SetBuffer(clientSocketAsyncEventArgs.BufferOffsetSend, this.Settings.BufferSize); Buffer.BlockCopy(clientSocketAsyncEventArgs.DataToSend, clientSocketAsyncEventArgs.BytesSentAlreadyCount, clientSocketAsyncEventArgs.Buffer, clientSocketAsyncEventArgs.BufferOffsetSend, this.Settings.BufferSize); } if (!clientSocketAsyncEventArgs.AcceptSocket.Connected || clientSocketAsyncEventArgs.IsClosed) { clientSocketAsyncEventArgs.Status = SocketStatus.Idle; clientSocketAsyncEventArgs.IOEvent.Set(); return; } bool willRaiseEvent = clientSocketAsyncEventArgs.AcceptSocket.SendAsync(clientSocketAsyncEventArgs); if (!willRaiseEvent) { ProcessSend(clientSocketAsyncEventArgs); } }
private void StartReceive(ClientSocketAsyncEventArgs clientSocketAsyncEventArgs) { if (clientSocketAsyncEventArgs.Status == SocketStatus.Idle) { clientSocketAsyncEventArgs.IOEvent.WaitOne(); clientSocketAsyncEventArgs.Status = SocketStatus.Receiving; clientSocketAsyncEventArgs.SetBuffer(clientSocketAsyncEventArgs.BufferOffsetReceive, this.Settings.BufferSize); if (!clientSocketAsyncEventArgs.AcceptSocket.Connected || clientSocketAsyncEventArgs.IsClosed) { clientSocketAsyncEventArgs.Status = SocketStatus.Idle; clientSocketAsyncEventArgs.IOEvent.Set(); return; } bool willRaiseEvent = clientSocketAsyncEventArgs.AcceptSocket.ReceiveAsync(clientSocketAsyncEventArgs); if (!willRaiseEvent) { ProcessReceive(clientSocketAsyncEventArgs); } } }