private DoOperationSendTo ( SafeCloseSocket handle, int &bytesTransferred ) : SocketError | ||
handle | SafeCloseSocket | |
bytesTransferred | int | |
return | SocketError |
public bool SendToAsync(SocketAsyncEventArgs e) { bool retval; if (s_loggingEnabled) { Logging.Enter(Logging.Sockets, this, "SendToAsync", ""); } if (CleanedUp) { throw new ObjectDisposedException(GetType().FullName); } if (e == null) { throw new ArgumentNullException("e"); } if (e.RemoteEndPoint == null) { throw new ArgumentNullException("RemoteEndPoint"); } // Check permissions for connect and prepare SocketAddress EndPoint endPointSnapshot = e.RemoteEndPoint; e._socketAddress = CheckCacheRemote(ref endPointSnapshot, false); // Prepare for the native call. e.StartOperationCommon(this); e.StartOperationSendTo(); // Make the native call. int bytesTransferred; SocketError socketError; // Wrap native methods with try/catch so event args object can be cleaned up. try { socketError = e.DoOperationSendTo(_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.Exit(Logging.Sockets, this, "SendToAsync", retval); } return retval; }