Socket.AcceptAsync(SocketAsyncEventArgs) Methode

Definition

Beginnt einen asynchronen Vorgang, um eine eingehende Verbindung anzunehmen.Begins an asynchronous operation to accept an incoming connection attempt.

public:
 bool AcceptAsync(System::Net::Sockets::SocketAsyncEventArgs ^ e);
public bool AcceptAsync (System.Net.Sockets.SocketAsyncEventArgs e);
member this.AcceptAsync : System.Net.Sockets.SocketAsyncEventArgs -> bool
Public Function AcceptAsync (e As SocketAsyncEventArgs) As Boolean

Parameter

e
SocketAsyncEventArgs

Das SocketAsyncEventArgs-Objekt, das für diesen asynchronen Socketvorgang verwendet werden soll.The SocketAsyncEventArgs object to use for this asynchronous socket operation.

Gibt zurück

true, wenn der E/A-Vorgang aussteht.true if the I/O operation is pending. Das Completed-Ereignis für den e-Parameter wird nach dem Abschluss des Vorgangs ausgelöst.The Completed event on the e parameter will be raised upon completion of the operation.

false, wenn der E/A-Vorgang synchron abgeschlossen wurde.false if the I/O operation completed synchronously. Das Completed-Ereignis für den e-Parameter wird nicht ausgelöst, und das als Parameter übergebene e-Objekt kann direkt nach der Rückgabe des Methodenaufrufs untersucht werden, um die Ergebnisse des Vorgangs abzurufen.The Completed event on the e parameter will not be raised and the e object passed as a parameter may be examined immediately after the method call returns to retrieve the result of the operation.

Ausnahmen

Ein Argument ist ungültig.An argument is not valid. Diese Ausnahme tritt auf, wenn der bereitgestellte Puffer nicht groß genug ist.This exception occurs if the buffer provided is not large enough. Der Puffer muss wenigstens 2 * (sizeof(SOCKADDR_STORAGE + 16) Bytes betragen.The buffer must be at least 2 * (sizeof(SOCKADDR_STORAGE + 16) bytes.

Diese Ausnahme tritt auch auf, wenn mehrere Puffer angegeben werden und die BufferList-Eigenschaft nicht NULL ist.This exception also occurs if multiple buffers are specified, the BufferList property is not null.

Ein Argument liegt außerhalb des gültigen Bereichs.An argument is out of range. Die Ausnahme tritt auf, wenn Count kleiner als 0 ist.The exception occurs if the Count is less than 0.

Es wurde eine ungültige Operation angefordert.An invalid operation was requested. Diese Ausnahme tritt auf, wenn der annehmende Socket keine Verbindungen überwacht oder der angenommene Socket gebunden ist.This exception occurs if the accepting Socket is not listening for connections or the accepted socket is bound.

Sie müssen die Bind(EndPoint)-Methode und die Listen(Int32)-Methode aufrufen, bevor Sie die AcceptAsync(SocketAsyncEventArgs)-Methode aufrufen.You must call the Bind(EndPoint) and Listen(Int32) method before calling the AcceptAsync(SocketAsyncEventArgs) method.

Diese Ausnahme tritt auch auf, wenn der Socket bereits verbunden ist oder bereits ein Socketvorgang mit dem angegebenen e-Parameter ausgeführt wird.This exception also occurs if the socket is already connected or a socket operation was already in progress using the specified e parameter.

Fehler beim Versuch, auf den Socket zuzugreifen.An error occurred when attempting to access the socket.

Für diese Methode ist Windows XP oder höher erforderlich.Windows XP or later is required for this method.

Der Socket wurde geschlossen.The Socket has been closed.

Hinweise

Verbindungs orientierte Protokolle können die AcceptAsync-Methode verwenden, um eingehende Verbindungsversuche asynchron zu verarbeiten.Connection-oriented protocols can use the AcceptAsync method to asynchronously process incoming connection attempts. Durch die asynchrone Annahme von Verbindungen haben Sie die Möglichkeit, Daten in einem separaten Ausführungs Thread zu senden und zu empfangen.Accepting connections asynchronously gives you the ability to send and receive data within a separate execution thread. Bevor Sie die AcceptAsync-Methode aufrufen, müssen Sie die Listen-Methode aufrufen, um eingehende Verbindungsanforderungen abzuhören und in die Warteschlange zuBefore calling the AcceptAsync method, you must call the Listen method to listen for and queue incoming connection requests.

Damit Sie über den Abschluss benachrichtigt werden können, müssen Sie eine Rückruf Methode erstellen, die den EventHandler-<SocketAsyncEventArgs-> Delegaten implementiert und ihn mit dem SocketAsyncEventArgs.Completed-Ereignis verknüpft.To be notified of completion, you must create a callback method that implements the EventHandler<SocketAsyncEventArgs> delegate and hook it to the SocketAsyncEventArgs.Completed event.

Die folgenden Eigenschaften und Ereignisse für das System.Net.Sockets.SocketAsyncEventArgs Objekt sind erforderlich:The following properties and events on the System.Net.Sockets.SocketAsyncEventArgs object are required:

Der Aufrufer kann optional eine vorhandene Socket angeben, die für die eingehende Verbindung verwendet werden soll, indem er das Socket angibt, das mit der SocketAsyncEventArgs.AcceptSocket-Eigenschaft verwendetThe caller can optionally specify an existing Socket to use for the incoming connection by specifying the Socket to use with the SocketAsyncEventArgs.AcceptSocket property.

Wenn die SocketAsyncEventArgs.AcceptSocket-Eigenschaft NULL ist, wird eine neue Socket mit derselben AddressFamily, SocketTypeund ProtocolType wie der aktuellen Socket erstellt und als SocketAsyncEventArgs.AcceptSocket-Eigenschaft festgelegt.If the SocketAsyncEventArgs.AcceptSocket property is null, a new Socket is constructed with the same AddressFamily, SocketType, and ProtocolType as the current Socket and set as the SocketAsyncEventArgs.AcceptSocket property.

Der Aufrufer kann die SocketAsyncEventArgs.UserToken-Eigenschaft auf ein beliebiges Benutzer Zustands Objekt festlegen, bevor die AcceptAsync-Methode aufgerufen wird, damit die Informationen in der Rückruf Methode abgerufen werden können.The caller may set the SocketAsyncEventArgs.UserToken property to any user state object desired before calling the AcceptAsync method, so that the information will be retrievable in the callback method. Wenn der Rückruf mehr Informationen benötigt als ein einzelnes Objekt, kann eine kleine Klasse erstellt werden, die die anderen erforderlichen Zustandsinformationen als Member enthält.If the callback needs more information than a single object, a small class can be created to hold the other required state information as members.

Optional kann ein Puffer bereitgestellt werden, in dem der anfängliche Datenblock im Socket empfangen werden kann, nachdem die ConnectAsync Methode erfolgreich abgeschlossen wurde.Optionally, a buffer may be provided in which to receive the initial block of data on the socket after the ConnectAsync method succeeds. In diesem Fall muss die SocketAsyncEventArgs.Buffer-Eigenschaft auf den Puffer festgelegt werden, der die zu empfangenden Daten enthält, und die SocketAsyncEventArgs.Count-Eigenschaft muss auf die maximale Anzahl von Daten Bytes festgelegt werden, die im Puffer empfangen werden.In this case, the SocketAsyncEventArgs.Buffer property needs to be set to the buffer containing the data to receive and the SocketAsyncEventArgs.Count property needs to be set to the maximum number of bytes of data to receive in the buffer. Diese Eigenschaften können mit der SocketAsyncEventArgs.SetBuffer-Methode festgelegt werden.These properties can be set using the SocketAsyncEventArgs.SetBuffer method. Ein Teil des verworfenen Puffers wird intern für die Verwendung durch den zugrunde liegenden Winsock-Accept-Accept-Vorgang verwendet.Part of the buffer passed in will be consumed internally for use by the underlying Winsock AcceptEx call. Dies bedeutet, dass die Menge der zurückgegebenen Daten immer kleiner ist als der Wert der SocketAsyncEventArgs.Count-Eigenschaft auf der bereitgestellten System.Net.Sockets.SocketAsyncEventArgs Instanz.This means that the amount of data returned will always be less than the value of the SocketAsyncEventArgs.Count property on the System.Net.Sockets.SocketAsyncEventArgs instance provided. Die intern verwendete Puffergröße variiert abhängig von der Adressfamilie des Sockets.The amount of the buffer used internally varies based on the address family of the socket. Die mindestens erforderliche Puffergröße beträgt 288 bytes.The minimum buffer size required is 288 bytes. Wenn eine größere Puffergröße angegeben wird, erwartet die Socket einige zusätzliche Daten, die nicht vom Winsock-Accept-Accept-Befehl empfangen werden, und wartet, bis diese zusätzlichen Daten empfangen wurden.If a larger buffer size is specified, then the Socket will expect some extra data other than the address data received by the Winsock AcceptEx call and will wait until this extra data is received. Wenn ein Timeout auftritt, wird die Verbindung zurückgesetzt.If a timeout occurs, the connection is reset. Wenn also zusätzliche Daten eines bestimmten Betrags erwartet werden, sollte die Puffergröße auf die minimale Puffergröße Plus diese Menge festgelegt werden.So if extra data is expected of a specific amount, then the buffer size should be set to the minimum buffer size plus this amount.

Die Beendigungs Rückruf Methode sollte die SocketAsyncEventArgs.SocketError-Eigenschaft überprüfen, um zu bestimmen, ob der AcceptAsync Vorgang erfolgreich war.The completion callback method should examine the SocketAsyncEventArgs.SocketError property to determine if the AcceptAsync operation was successful.

Das SocketAsyncEventArgs.Completed Ereignis kann in einigen Fällen auftreten, wenn keine Verbindung akzeptiert wurde und die SocketAsyncEventArgs.SocketError-Eigenschaft auf ConnectionResetfestgelegt wurde.The SocketAsyncEventArgs.Completed event can occur in some cases when no connection has been accepted and cause the SocketAsyncEventArgs.SocketError property to be set to ConnectionReset. Dies kann das Ergebnis der Überprüfung des Ports mithilfe eines halb geöffneten SYN-typscans sein (eine SYN-> SYN-ACK-> RST-Sequenz).This can occur as a result of port scanning using a half-open SYN type scan (a SYN -> SYN-ACK -> RST sequence). Anwendungen, die die AcceptAsync-Methode verwenden, sollten darauf vorbereitet sein, diese Bedingung zu verarbeiten.Applications using the AcceptAsync method should be prepared to handle this condition.

Gilt für:

Siehe auch