Socket.AcceptAsync Metódus

Definíció

Túlterhelések

Name Description
AcceptAsync()

Bejövő kapcsolatot fogad el.

AcceptAsync(Socket)

Bejövő kapcsolatot fogad el.

AcceptAsync(SocketAsyncEventArgs)

A bejövő kapcsolati kísérlet elfogadásához aszinkron műveletet indít el.

AcceptAsync(CancellationToken)

Bejövő kapcsolatot fogad el.

AcceptAsync(Socket, CancellationToken)

Bejövő kapcsolatot fogad el.

AcceptAsync()

Forrás:
Socket.Tasks.cs
Forrás:
Socket.Tasks.cs
Forrás:
Socket.Tasks.cs
Forrás:
Socket.Tasks.cs
Forrás:
Socket.Tasks.cs

Bejövő kapcsolatot fogad el.

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)

Válaszok

Aszinkron feladat, amely az elfogadott szoftvercsatornával fejeződik be.

Kivételek

Érvénytelen műveletet kért a rendszer. Ez a kivétel akkor fordul elő, ha az elfogadás Socket nem figyeli a kapcsolatokat, vagy az elfogadott szoftvercsatorna kötött.

A metódus meghívása előtt meg kell hívnia a Bind(EndPoint) metódust és Listen(Int32) a metódust AcceptAsync(SocketAsyncEventArgs) .

Hiba történt a szoftvercsatorna elérésekor.

A Socket le van zárva.

Megjegyzések

Ez a metódus a feladatban tárolja az összes olyan nem használati kivételt, amelyet a metódus szinkron megfelelője tud dobni. Ha egy kivételt tárol a visszaadott tevékenységben, akkor a rendszer akkor küldi el a kivételt, amikor a feladatra vár. A használati kivételek(például ArgumentException) továbbra is szinkron módon jelennek meg. A tárolt kivételekről lásd a következő által Accept()kiadott kivételeket: .

A következőre érvényes:

AcceptAsync(Socket)

Forrás:
Socket.Tasks.cs
Forrás:
Socket.Tasks.cs
Forrás:
Socket.Tasks.cs
Forrás:
Socket.Tasks.cs
Forrás:
Socket.Tasks.cs

Bejövő kapcsolatot fogad el.

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)

Paraméterek

acceptSocket
Socket

A kapcsolat elfogadásához használandó szoftvercsatorna.

Válaszok

Aszinkron feladat, amely az elfogadott szoftvercsatornával fejeződik be.

Kivételek

Érvénytelen műveletet kért a rendszer. Ez a kivétel akkor fordul elő, ha az elfogadás Socket nem figyeli a kapcsolatokat, vagy az elfogadott szoftvercsatorna kötött.

A metódus meghívása előtt meg kell hívnia a Bind(EndPoint) metódust és Listen(Int32) a metódust AcceptAsync(SocketAsyncEventArgs) .

Hiba történt a szoftvercsatorna elérésekor.

A Socket le van zárva.

A következőre érvényes:

AcceptAsync(SocketAsyncEventArgs)

Forrás:
Socket.cs
Forrás:
Socket.cs
Forrás:
Socket.cs
Forrás:
Socket.cs
Forrás:
Socket.cs

A bejövő kapcsolati kísérlet elfogadásához aszinkron műveletet indít el.

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

Paraméterek

e
SocketAsyncEventArgs

Az SocketAsyncEventArgs aszinkron szoftvercsatorna-művelethez használni kívánt objektum.

Válaszok

true ha az I/O-művelet függőben van. A Completed paraméter eseménye a e művelet befejezésekor lesz előállítva.

false ha az I/O-művelet szinkron módon fejeződött be. A Completed paraméter eseménye e nem lesz előállítva, és a e paraméterként átadott objektum azonnal megvizsgálható, miután a metódushívás visszatér a művelet eredményének lekéréséhez.

Kivételek

Érvénytelen argumentum. Ez a kivétel akkor fordul elő, ha a megadott puffer nem elég nagy. A puffernek legalább 2 * (sizeof(SOCKADDR_STORAGE + 16)) bájtnak kell lennie.

Ez a kivétel akkor is előfordul, ha több puffer van megadva, a BufferList tulajdonság nem null.

Az argumentumok tartományon kívülre kerülnek. A kivétel akkor fordul elő, ha a Count szám kisebb, mint 0.

Érvénytelen műveletet kért a rendszer. Ez a kivétel akkor fordul elő, ha az elfogadás Socket nem figyeli a kapcsolatokat, vagy az elfogadott szoftvercsatorna kötött.

A metódus meghívása előtt meg kell hívnia a Bind(EndPoint) metódust és Listen(Int32) a metódust AcceptAsync(SocketAsyncEventArgs) .

Ez a kivétel akkor is előfordul, ha a szoftvercsatorna már csatlakoztatva van, vagy egy szoftvercsatorna-művelet már folyamatban volt a megadott e paraméterrel.

Hiba történt a szoftvercsatorna elérésekor.

A Socket le van zárva.

Megjegyzések

A kapcsolatorientált protokollok a AcceptAsync metódussal aszinkron módon dolgozhatják fel a bejövő kapcsolati kísérleteket. A kapcsolatok aszinkron elfogadása lehetővé teszi az adatok külön végrehajtási szálon belüli küldését és fogadását. A metódus meghívása AcceptAsync előtt meg kell hívnia a metódust a Listen bejövő kapcsolatkérések figyeléséhez és várólistára helyezéséhez.

Ha értesítést szeretne kapni a befejezésről, létre kell hoznia egy visszahívási módszert, amely implementálja az EventHandler<SocketAsyncEventArgs> delegáltját, és csatlakoztatja az SocketAsyncEventArgs.Completed eseményhez.

Az objektumon a System.Net.Sockets.SocketAsyncEventArgs következő tulajdonságokra és eseményekre van szükség:

A hívó opcionálisan megadhatja a bejövő kapcsolathoz használandó meglévőt Socket a Socket tulajdonsággal használni kívánt beállítás megadásával SocketAsyncEventArgs.AcceptSocket .

Ha a SocketAsyncEventArgs.AcceptSocket tulajdonság null értékű, a rendszer egy újat Socket hoz létre ugyanazzal AddressFamilya , SocketTypeés ProtocolType az aktuális Socket értékével, és a SocketAsyncEventArgs.AcceptSocket tulajdonságként van beállítva.

A hívó a SocketAsyncEventArgs.UserToken metódus meghívása előtt bármilyen felhasználói állapotobjektumra beállíthatja a AcceptAsync tulajdonságot, hogy az információk lekérthetők legyenek a visszahívási metódusban. Ha a visszahívásnak több információra van szüksége, mint egyetlen objektum, létrehozhat egy kis osztályt, amely tagként tárolja a többi szükséges állapotinformációt.

Opcionálisan egy puffer is megadható, amelyben a rendszer a metódus sikeres végrehajtása után fogadja a szoftvercsatornán a ConnectAsync kezdeti adatblokkot. Ebben az esetben a tulajdonságot a SocketAsyncEventArgs.Buffer fogadó adatokat tartalmazó pufferre kell állítani, a SocketAsyncEventArgs.Count tulajdonságot pedig a pufferben fogadni kívánt adat bájtjainak maximális számára kell beállítani. Ezek a tulajdonságok a SocketAsyncEventArgs.SetBuffer metódussal állíthatók be. Az átadott puffer egy része belsőleg lesz felhasználva az alapul szolgáló Winsock AcceptEx-hívás számára. Ez azt jelenti, hogy a visszaadott adatok mennyisége mindig kisebb lesz, mint a SocketAsyncEventArgs.Count megadott példányon System.Net.Sockets.SocketAsyncEventArgs lévő tulajdonság értéke. A belsőleg használt puffer mennyisége a szoftvercsatorna címcsaládja alapján változik. A minimális pufferméret 288 bájt. Ha nagyobb pufferméretet ad meg, akkor a Socket Winsock AcceptEx hívás által fogadott címadatoktól eltérő további adatokra számíthat, és megvárja a további adatok fogadását. Időtúllépés esetén a kapcsolat alaphelyzetbe áll. Tehát ha további adatokra van szükség egy adott mennyiséghez, akkor a puffer méretét a minimális pufferméretre kell beállítani, plusz ezt az összeget.

A befejezési visszahívási metódusnak meg kell vizsgálnia a SocketAsyncEventArgs.SocketError tulajdonságot annak megállapításához, hogy a AcceptAsync művelet sikeres volt-e.

Az SocketAsyncEventArgs.Completed esemény akkor fordulhat elő, ha a rendszer nem fogad el kapcsolatot, és a SocketAsyncEventArgs.SocketError tulajdonság értéke ConnectionReseta következő lehet: . Ez egy félig nyitott SYN-típusvizsgálat (SYN -> SYN-ACK -> RST-sorozat) portvizsgálatának eredményeként fordulhat elő. A metódust AcceptAsync használó alkalmazásokat fel kell készíteni a feltétel kezelésére.

Lásd még

A következőre érvényes:

AcceptAsync(CancellationToken)

Forrás:
Socket.Tasks.cs
Forrás:
Socket.Tasks.cs
Forrás:
Socket.Tasks.cs
Forrás:
Socket.Tasks.cs
Forrás:
Socket.Tasks.cs

Bejövő kapcsolatot fogad el.

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)

Paraméterek

cancellationToken
CancellationToken

Az aszinkron művelet megszakításához használható lemondási jogkivonat.

Válaszok

Aszinkron feladat, amely az elfogadott szoftvercsatornával fejeződik be.

Kivételek

Érvénytelen műveletet kért a rendszer. Ez a kivétel akkor fordul elő, ha az elfogadás Socket nem figyeli a kapcsolatokat, vagy az elfogadott szoftvercsatorna kötött.

A metódus meghívása előtt meg kell hívnia a Bind(EndPoint) metódust és Listen(Int32) a metódust AcceptAsync(SocketAsyncEventArgs) .

Hiba történt a szoftvercsatorna elérésekor.

A Socket le van zárva.

A lemondási jogkivonat megszakadt. Ezt a kivételt a rendszer a visszaadott tevékenységben tárolja.

Megjegyzések

Ez a metódus a feladatban tárolja az összes olyan nem használati kivételt, amelyet a metódus szinkron megfelelője tud dobni. Ha egy kivételt tárol a visszaadott tevékenységben, akkor a rendszer akkor küldi el a kivételt, amikor a feladatra vár. A használati kivételek(például ArgumentException) továbbra is szinkron módon jelennek meg. A tárolt kivételekről lásd a következő által Accept()kiadott kivételeket: .

A következőre érvényes:

AcceptAsync(Socket, CancellationToken)

Forrás:
Socket.Tasks.cs
Forrás:
Socket.Tasks.cs
Forrás:
Socket.Tasks.cs
Forrás:
Socket.Tasks.cs
Forrás:
Socket.Tasks.cs

Bejövő kapcsolatot fogad el.

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)

Paraméterek

acceptSocket
Socket

A kapcsolat elfogadásához használandó szoftvercsatorna.

cancellationToken
CancellationToken

Az aszinkron művelet megszakításához használható lemondási jogkivonat.

Válaszok

Aszinkron feladat, amely az elfogadott szoftvercsatornával fejeződik be.

Kivételek

Érvénytelen műveletet kért a rendszer. Ez a kivétel akkor fordul elő, ha az elfogadás Socket nem figyeli a kapcsolatokat, vagy az elfogadott szoftvercsatorna kötött.

A metódus meghívása előtt meg kell hívnia a Bind(EndPoint) metódust és Listen(Int32) a metódust AcceptAsync(SocketAsyncEventArgs) .

Hiba történt a szoftvercsatorna elérésekor.

A Socket le van zárva.

A lemondási jogkivonat megszakadt. Ezt a kivételt a rendszer a visszaadott tevékenységben tárolja.

A következőre érvényes: