public void Send(ArraySegment <byte> sendBuffer) { if (sendBuffer.IsEmpty()) { return; } m_SocketAsyncEventArgs.GetSendContextData().Add(sendBuffer); TrySend(m_SocketAsyncEventArgs); }
public void TrySend(SocketAsyncEventArgs args) { if (!m_Sending.TryEnter()) { return; } if (args.GetSendContextData().IsEmpty) { m_Sending.TryExit(); return; } try { bool willRaiseEventLater; while (!(willRaiseEventLater = SendAsync(args))) { var canSendAvailableBufferList = CompleteSend(args); if (!canSendAvailableBufferList) { m_Sending.TryExit(); break; } } } catch (Exception e) { CloseSocketWhileSending(args, e); } }
private bool CompleteSend(SocketAsyncEventArgs args) { if (args.SocketError != SocketError.Success) { return(false); } return(args.GetSendContextData().Skip(args.BytesTransferred)); }
private bool SendAsync(SocketAsyncEventArgs args) { if (IsClosed) { args.SocketError = SocketError.OperationAborted; return(false); } args.GetSendContextData().CopyBufferListTo(args); Debug.Assert(!args.BufferList.IsEmpty()); return(m_Socket.SendAsync(args)); }