private DoOperationSend ( SafeCloseSocket handle, int &bytesTransferred ) : SocketError | ||
handle | SafeCloseSocket | |
bytesTransferred | int | |
return | SocketError |
public bool SendAsync(SocketAsyncEventArgs e) { bool retval; if (s_loggingEnabled) { Logging.Enter(Logging.Sockets, this, "SendAsync", ""); } if (CleanedUp) { throw new ObjectDisposedException(GetType().FullName); } if (e == null) { throw new ArgumentNullException("e"); } // Prepare for the native call. e.StartOperationCommon(this); e.StartOperationSend(); // Local vars for sync completion of native call. int bytesTransferred; SocketError socketError; // Wrap native methods with try/catch so event args object can be cleaned up. try { socketError = e.DoOperationSend(_handle, out bytesTransferred); } catch (Exception ex) { // Clear in-use flag on event args object. e.Complete(); throw ex; } // Handle completion when completion port is not posted. if (socketError != SocketError.Success && socketError != SocketError.IOPending) { e.FinishOperationSyncFailure(socketError, bytesTransferred, SocketFlags.None); retval = false; } else { retval = true; } if (s_loggingEnabled) { Logging.Enter(Logging.Sockets, this, "SendAsync", retval); } return retval; }