Teilen über


Socket.AcceptAsync Methode

Definition

Überlädt

AcceptAsync()

Akzeptiert eine eingehende Verbindung.

AcceptAsync(Socket)

Akzeptiert eine eingehende Verbindung.

AcceptAsync(SocketAsyncEventArgs)

Beginnt einen asynchronen Vorgang, um eine eingehende Verbindung anzunehmen.

AcceptAsync(CancellationToken)

Akzeptiert eine eingehende Verbindung.

AcceptAsync(Socket, CancellationToken)

Akzeptiert eine eingehende Verbindung.

AcceptAsync()

Quelle:
Socket.Tasks.cs
Quelle:
Socket.Tasks.cs
Quelle:
Socket.Tasks.cs

Akzeptiert eine eingehende Verbindung.

public:
 System::Threading::Tasks::Task<System::Net::Sockets::Socket ^> ^ AcceptAsync();
public System.Threading.Tasks.Task<System.Net.Sockets.Socket> AcceptAsync ();
member this.AcceptAsync : unit -> System.Threading.Tasks.Task<System.Net.Sockets.Socket>
Public Function AcceptAsync () As Task(Of Socket)

Gibt zurück

Eine asynchrone Aufgabe, die mit dem akzeptierten Socket abgeschlossen wird.

Ausnahmen

Es wurde eine ungültige Operation angefordert. Diese Ausnahme tritt auf, wenn der annehmende Socket keine Verbindungen überwacht oder der angenommene Socket gebunden ist.

Sie müssen die Bind(EndPoint)-Methode und die Listen(Int32)-Methode aufrufen, bevor Sie die AcceptAsync(SocketAsyncEventArgs)-Methode aufrufen.

Diese Ausnahme tritt auch auf, wenn der Socket bereits verbunden ist oder bereits ein Socketvorgang mit dem angegebenen e-Parameter ausgeführt wird.

Fehler beim Versuch, auf den Socket zuzugreifen.

Der Socket wurde geschlossen.

Hinweise

Diese Methode speichert in der Aufgabe, die sie alle Nichtverwendungsausnahmen zurückgibt, die die synchrone Entsprechung der Methode auslösen kann. Wenn eine Ausnahme in der zurückgegebenen Aufgabe gespeichert wird, wird diese Ausnahme ausgelöst, wenn die Aufgabe erwartet wird. Nutzungsausnahmen, z. B ArgumentException. , werden weiterhin synchron ausgelöst. Informationen zu den gespeicherten Ausnahmen finden Sie unter die von ausgelösten Accept()Ausnahmen.

Gilt für:

AcceptAsync(Socket)

Quelle:
Socket.Tasks.cs
Quelle:
Socket.Tasks.cs
Quelle:
Socket.Tasks.cs

Akzeptiert eine eingehende Verbindung.

public:
 System::Threading::Tasks::Task<System::Net::Sockets::Socket ^> ^ AcceptAsync(System::Net::Sockets::Socket ^ acceptSocket);
public System.Threading.Tasks.Task<System.Net.Sockets.Socket> AcceptAsync (System.Net.Sockets.Socket? acceptSocket);
member this.AcceptAsync : System.Net.Sockets.Socket -> System.Threading.Tasks.Task<System.Net.Sockets.Socket>
Public Function AcceptAsync (acceptSocket As Socket) As Task(Of Socket)

Parameter

acceptSocket
Socket

Der Socket, der zum Akzeptieren der Verbindung verwendet werden soll.

Gibt zurück

Eine asynchrone Aufgabe, die mit dem akzeptierten Socket abgeschlossen wird.

Ausnahmen

Es wurde eine ungültige Operation angefordert. Diese Ausnahme tritt auf, wenn der annehmende Socket keine Verbindungen überwacht oder der angenommene Socket gebunden ist.

Sie müssen die Bind(EndPoint)-Methode und die Listen(Int32)-Methode aufrufen, bevor Sie die AcceptAsync(SocketAsyncEventArgs)-Methode aufrufen.

Diese Ausnahme tritt auch auf, wenn der Socket bereits verbunden ist oder bereits ein Socketvorgang mit dem angegebenen e-Parameter ausgeführt wird.

Fehler beim Versuch, auf den Socket zuzugreifen.

Der Socket wurde geschlossen.

Gilt für:

AcceptAsync(SocketAsyncEventArgs)

Quelle:
Socket.cs
Quelle:
Socket.cs
Quelle:
Socket.cs

Beginnt einen asynchronen Vorgang, um eine eingehende Verbindung anzunehmen.

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.

Gibt zurück

true, wenn der E/A-Vorgang aussteht. Das Completed-Ereignis für den e-Parameter wird nach dem Abschluss des Vorgangs ausgelöst.

false, wenn der E/A-Vorgang synchron abgeschlossen wurde. 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.

Ausnahmen

Ein Argument ist ungültig. Diese Ausnahme tritt auf, wenn der bereitgestellte Puffer nicht groß genug ist. Der Puffer muss wenigstens 2 * (sizeof(SOCKADDR_STORAGE + 16) Bytes betragen.

Diese Ausnahme tritt auch auf, wenn mehrere Puffer angegeben werden und die BufferList-Eigenschaft nicht NULL ist.

Ein Argument liegt außerhalb des gültigen Bereichs. Die Ausnahme tritt auf, wenn Count kleiner als 0 ist.

Es wurde eine ungültige Operation angefordert. Diese Ausnahme tritt auf, wenn der annehmende Socket keine Verbindungen überwacht oder der angenommene Socket gebunden ist.

Sie müssen die Bind(EndPoint)-Methode und die Listen(Int32)-Methode aufrufen, bevor Sie die AcceptAsync(SocketAsyncEventArgs)-Methode aufrufen.

Diese Ausnahme tritt auch auf, wenn der Socket bereits verbunden ist oder bereits ein Socketvorgang mit dem angegebenen e-Parameter ausgeführt wird.

Fehler beim Versuch, auf den Socket zuzugreifen.

Der Socket wurde geschlossen.

Hinweise

Verbindungsorientierte Protokolle können die AcceptAsync -Methode verwenden, um eingehende Verbindungsversuche asynchron zu verarbeiten. Durch das asynchrone Akzeptieren von Verbindungen können Sie Daten in einem separaten Ausführungsthread senden und empfangen. Bevor Sie die AcceptAsync -Methode aufrufen, müssen Sie die Listen -Methode aufrufen, um eingehende Verbindungsanforderungen zu lauschen und in die Warteschlange zu stellen.

Um über den Abschluss benachrichtigt zu werden, müssen Sie eine Rückrufmethode erstellen, die den EventHandler-Delegaten<SocketAsyncEventArgs> implementiert und mit dem SocketAsyncEventArgs.Completed Ereignis verbinden kann.

Die folgenden Eigenschaften und Ereignisse für das System.Net.Sockets.SocketAsyncEventArgs Objekt sind erforderlich:

Der Aufrufer kann optional einen vorhandenen Socket angeben, der für die eingehende Verbindung verwendet werden soll, indem er den Socket für die SocketAsyncEventArgs.AcceptSocket -Eigenschaft zu verwendenden angibt.

Wenn die SocketAsyncEventArgs.AcceptSocket Eigenschaft NULL ist, wird eine neue Socket mit demselben AddressFamilyerstellt, SocketTypeund ProtocolType als aktuelle Socket und als - SocketAsyncEventArgs.AcceptSocket Eigenschaft festgelegt.

Der Aufrufer kann die SocketAsyncEventArgs.UserToken Eigenschaft auf ein beliebiges Benutzerzustandsobjekt festlegen, das vor dem Aufrufen der AcceptAsync Methode gewünscht wird, sodass die Informationen in der Rückrufmethode abgerufen werden können. Wenn der Rückruf mehr Informationen als ein einzelnes Objekt benötigt, kann eine kleine Klasse erstellt werden, die die anderen erforderlichen Zustandsinformationen als Member enthält.

Optional kann ein Puffer bereitgestellt werden, in dem der anfängliche Datenblock für den Socket empfangen werden soll, nachdem die ConnectAsync Methode erfolgreich war. 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 Bytes festgelegt werden, die im Puffer empfangen werden sollen. Diese Eigenschaften können mit der SocketAsyncEventArgs.SetBuffer -Methode festgelegt werden. Ein Teil des übergebenen Puffers wird intern für die Verwendung durch den zugrunde liegenden Winsock AcceptEx-Aufruf verwendet. Dies bedeutet, dass die zurückgegebene Datenmenge immer kleiner als der Wert der SocketAsyncEventArgs.Count Eigenschaft auf dem System.Net.Sockets.SocketAsyncEventArgs angegebenen instance ist. Die Menge des intern verwendeten Puffers variiert je nach Adressfamilie des Sockets. Die erforderliche Mindestpuffergröße beträgt 288 Bytes. Wenn eine größere Puffergröße angegeben wird, erwartet das Socket einige zusätzliche Daten außer den Adressdaten, die vom Winsock AcceptEx-Aufruf empfangen werden, und wartet, bis diese zusätzlichen Daten empfangen werden. Wenn ein Timeout auftritt, wird die Verbindung zurückgesetzt. Wenn also zusätzliche Daten in einer bestimmten Menge erwartet werden, sollte die Puffergröße auf die minimale Puffergröße plus diesen Betrag festgelegt werden.

Die Vervollständigungsrückrufmethode sollte die SocketAsyncEventArgs.SocketError -Eigenschaft untersuchen, um festzustellen, ob der AcceptAsync Vorgang erfolgreich war.

Das SocketAsyncEventArgs.Completed -Ereignis kann in einigen Fällen auftreten, wenn keine Verbindung akzeptiert wurde und die SocketAsyncEventArgs.SocketError -Eigenschaft auf ConnectionResetfestgelegt wird. Dies kann als Folge der Portüberprüfung mithilfe eines halb geöffneten SYN-Typscans (SYN -> SYN-ACK -> RST-Sequenz) auftreten. Anwendungen, die die AcceptAsync -Methode verwenden, sollten für diese Bedingung vorbereitet sein.

Weitere Informationen

Gilt für:

AcceptAsync(CancellationToken)

Quelle:
Socket.Tasks.cs
Quelle:
Socket.Tasks.cs
Quelle:
Socket.Tasks.cs

Akzeptiert eine eingehende Verbindung.

public:
 System::Threading::Tasks::ValueTask<System::Net::Sockets::Socket ^> AcceptAsync(System::Threading::CancellationToken cancellationToken);
public System.Threading.Tasks.ValueTask<System.Net.Sockets.Socket> AcceptAsync (System.Threading.CancellationToken cancellationToken);
member this.AcceptAsync : System.Threading.CancellationToken -> System.Threading.Tasks.ValueTask<System.Net.Sockets.Socket>
Public Function AcceptAsync (cancellationToken As CancellationToken) As ValueTask(Of Socket)

Parameter

cancellationToken
CancellationToken

Ein Abbruchtoken, das zum Abbrechen des asynchronen Vorgangs verwendet werden kann.

Gibt zurück

Eine asynchrone Aufgabe, die mit dem akzeptierten Socket abgeschlossen wird.

Ausnahmen

Es wurde eine ungültige Operation angefordert. Diese Ausnahme tritt auf, wenn der annehmende Socket keine Verbindungen überwacht oder der angenommene Socket gebunden ist.

Sie müssen die Bind(EndPoint)-Methode und die Listen(Int32)-Methode aufrufen, bevor Sie die AcceptAsync(SocketAsyncEventArgs)-Methode aufrufen.

Diese Ausnahme tritt auch auf, wenn der Socket bereits verbunden ist oder bereits ein Socketvorgang mit dem angegebenen e-Parameter ausgeführt wird.

Fehler beim Versuch, auf den Socket zuzugreifen.

Der Socket wurde geschlossen.

Das Abbruchtoken wurde abgebrochen. Diese Ausnahme wird in der zurückgegebenen Aufgabe gespeichert.

Hinweise

Diese Methode speichert in der Aufgabe, die sie alle Nichtverwendungsausnahmen zurückgibt, die die synchrone Entsprechung der Methode auslösen kann. Wenn eine Ausnahme in der zurückgegebenen Aufgabe gespeichert wird, wird diese Ausnahme ausgelöst, wenn die Aufgabe erwartet wird. Nutzungsausnahmen, z. B ArgumentException. , werden weiterhin synchron ausgelöst. Informationen zu den gespeicherten Ausnahmen finden Sie unter die von ausgelösten Accept()Ausnahmen.

Gilt für:

AcceptAsync(Socket, CancellationToken)

Quelle:
Socket.Tasks.cs
Quelle:
Socket.Tasks.cs
Quelle:
Socket.Tasks.cs

Akzeptiert eine eingehende Verbindung.

public:
 System::Threading::Tasks::ValueTask<System::Net::Sockets::Socket ^> AcceptAsync(System::Net::Sockets::Socket ^ acceptSocket, System::Threading::CancellationToken cancellationToken);
public System.Threading.Tasks.ValueTask<System.Net.Sockets.Socket> AcceptAsync (System.Net.Sockets.Socket? acceptSocket, System.Threading.CancellationToken cancellationToken);
member this.AcceptAsync : System.Net.Sockets.Socket * System.Threading.CancellationToken -> System.Threading.Tasks.ValueTask<System.Net.Sockets.Socket>
Public Function AcceptAsync (acceptSocket As Socket, cancellationToken As CancellationToken) As ValueTask(Of Socket)

Parameter

acceptSocket
Socket

Der Socket, der zum Akzeptieren der Verbindung verwendet werden soll.

cancellationToken
CancellationToken

Ein Abbruchtoken, das zum Abbrechen des asynchronen Vorgangs verwendet werden kann.

Gibt zurück

Eine asynchrone Aufgabe, die mit dem akzeptierten Socket abgeschlossen wird.

Ausnahmen

Es wurde eine ungültige Operation angefordert. Diese Ausnahme tritt auf, wenn der annehmende Socket keine Verbindungen überwacht oder der angenommene Socket gebunden ist.

Sie müssen die Bind(EndPoint)-Methode und die Listen(Int32)-Methode aufrufen, bevor Sie die AcceptAsync(SocketAsyncEventArgs)-Methode aufrufen.

Diese Ausnahme tritt auch auf, wenn der Socket bereits verbunden ist oder bereits ein Socketvorgang mit dem angegebenen e-Parameter ausgeführt wird.

Fehler beim Versuch, auf den Socket zuzugreifen.

Der Socket wurde geschlossen.

Das Abbruchtoken wurde abgebrochen. Diese Ausnahme wird in der zurückgegebenen Aufgabe gespeichert.

Gilt für: