Socket.AcceptAsync Metodo

Definizione

Overload

AcceptAsync()

Accetta una connessione in ingresso.

AcceptAsync(Socket)

Accetta una connessione in ingresso.

AcceptAsync(SocketAsyncEventArgs)

Avvia un'operazione asincrona per accettare un tentativo di connessione in ingresso.

AcceptAsync(CancellationToken)

Accetta una connessione in ingresso.

AcceptAsync(Socket, CancellationToken)

Accetta una connessione in ingresso.

AcceptAsync()

Origine:
Socket.Tasks.cs
Origine:
Socket.Tasks.cs
Origine:
Socket.Tasks.cs

Accetta una connessione in ingresso.

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)

Restituisce

Attività asincrona che viene completata con il socket accettato.

Eccezioni

È stata richiesta un'operazione non valida. Questa eccezione si verifica se l'oggetto Socket preposto ad accettare la connessione non è in attesa di connessioni o se il socket accettato è associato.

È necessario chiamare il metodo Bind(EndPoint) e Listen(Int32) prima di chiamare il metodo AcceptAsync(SocketAsyncEventArgs).

Questa eccezione si verifica anche se il socket è già connesso o se un'operazione socket era già in corso utilizzando il parametro e specificato.

Si è verificato un errore durante il tentativo di accesso al socket.

L'oggetto Socket è stato chiuso.

Commenti

Questo metodo archivia nell'attività che restituisce tutte le eccezioni non di utilizzo che la controparte sincrona del metodo può generare. Se un'eccezione viene archiviata nell'attività restituita, tale eccezione verrà generata quando l'attività è attesa. Le eccezioni di utilizzo, ad esempio ArgumentException, vengono comunque generate in modo sincrono. Per le eccezioni archiviate, vedere le eccezioni generate da Accept().

Si applica a

AcceptAsync(Socket)

Origine:
Socket.Tasks.cs
Origine:
Socket.Tasks.cs
Origine:
Socket.Tasks.cs

Accetta una connessione in ingresso.

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)

Parametri

acceptSocket
Socket

Socket da usare per accettare la connessione.

Restituisce

Attività asincrona che viene completata con il socket accettato.

Eccezioni

È stata richiesta un'operazione non valida. Questa eccezione si verifica se l'oggetto Socket preposto ad accettare la connessione non è in attesa di connessioni o se il socket accettato è associato.

È necessario chiamare il metodo Bind(EndPoint) e Listen(Int32) prima di chiamare il metodo AcceptAsync(SocketAsyncEventArgs).

Questa eccezione si verifica anche se il socket è già connesso o se un'operazione socket era già in corso utilizzando il parametro e specificato.

Si è verificato un errore durante il tentativo di accesso al socket.

L'oggetto Socket è stato chiuso.

Si applica a

AcceptAsync(SocketAsyncEventArgs)

Origine:
Socket.cs
Origine:
Socket.cs
Origine:
Socket.cs

Avvia un'operazione asincrona per accettare un tentativo di connessione in ingresso.

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

Parametri

e
SocketAsyncEventArgs

Oggetto SocketAsyncEventArgs da utilizzare per questa operazione socket asincrona.

Restituisce

true se l'operazione di I/O è in sospeso. Al completamento dell'operazione verrà generato l'evento Completed sul parametro e.

false se l'operazione di I/O è stata completata in modo sincrono. L'evento Completed nel parametro e non verrà generato e l'oggetto e passato come parametro potrebbe essere esaminato immediatamente dopo che la chiamata al metodo ha restituito il risultato, per recuperare il risultato dell'operazione.

Eccezioni

Un argomento non è valido. Questa eccezione si verifica se il buffer fornito non è abbastanza grande. Il buffer deve essere di almeno 2 * (sizeof(SOCKADDR_STORAGE + 16) byte.

Questa eccezione si verifica anche se sono specificati più buffer e la proprietà BufferList non è null.

Un argomento non è compreso nell'intervallo. L'eccezione si verifica se l'oggetto Count è minore di 0.

È stata richiesta un'operazione non valida. Questa eccezione si verifica se l'oggetto Socket preposto ad accettare la connessione non è in attesa di connessioni o se il socket accettato è associato.

È necessario chiamare il metodo Bind(EndPoint) e Listen(Int32) prima di chiamare il metodo AcceptAsync(SocketAsyncEventArgs).

Questa eccezione si verifica anche se il socket è già connesso o se un'operazione socket era già in corso utilizzando il parametro e specificato.

Si è verificato un errore durante il tentativo di accesso al socket.

L'oggetto Socket è stato chiuso.

Commenti

I protocolli orientati alla connessione possono usare il AcceptAsync metodo per elaborare in modo asincrono i tentativi di connessione in ingresso. L'accettazione asincrona delle connessioni consente di inviare e ricevere dati all'interno di un thread di esecuzione separato. Prima di chiamare il metodo, è necessario chiamare il AcceptAsyncListen metodo per ascoltare e accodare le richieste di connessione in ingresso.

Per ricevere una notifica di completamento, è necessario creare un metodo di callback che implementa il delegato EventHandler<SocketAsyncEventArgs> e collegarlo all'evento SocketAsyncEventArgs.Completed .

Sono necessarie le proprietà e gli eventi seguenti nell'oggetto System.Net.Sockets.SocketAsyncEventArgs :

Il chiamante può facoltativamente specificare un oggetto esistente Socket da usare per la connessione in ingresso specificando l'oggetto Socket da usare con la SocketAsyncEventArgs.AcceptSocket proprietà .

Se la SocketAsyncEventArgs.AcceptSocket proprietà è Null, viene costruito un nuovo Socket oggetto con lo stesso AddressFamilyoggetto , SocketTypee come corrente Socket e ProtocolType impostato come SocketAsyncEventArgs.AcceptSocket proprietà.

Il chiamante può impostare la SocketAsyncEventArgs.UserToken proprietà su qualsiasi oggetto stato utente desiderato prima di chiamare il AcceptAsync metodo, in modo che le informazioni saranno recuperabili nel metodo di callback. Se il callback richiede più informazioni di un singolo oggetto, è possibile creare una classe piccola per contenere le altre informazioni sullo stato necessarie come membri.

Facoltativamente, un buffer può essere fornito in cui ricevere il blocco iniziale di dati nel socket dopo che il ConnectAsync metodo ha esito positivo. In questo caso, la SocketAsyncEventArgs.Buffer proprietà deve essere impostata sul buffer contenente i dati da ricevere e la SocketAsyncEventArgs.Count proprietà deve essere impostata sul numero massimo di byte di dati da ricevere nel buffer. Queste proprietà possono essere impostate usando il SocketAsyncEventArgs.SetBuffer metodo . Parte del buffer passato verrà usata internamente per l'uso dalla chiamata Winsock AcceptEx sottostante. Ciò significa che la quantità di dati restituiti sarà sempre minore del valore della SocketAsyncEventArgs.Count proprietà nell'istanza System.Net.Sockets.SocketAsyncEventArgs specificata. La quantità del buffer utilizzata internamente varia in base alla famiglia di indirizzi del socket. Le dimensioni minime del buffer necessarie sono 288 byte. Se viene specificata una dimensione del buffer maggiore, si Socket prevede che alcuni dati aggiuntivi diversi dai dati dell'indirizzo ricevuti dalla chiamata Winsock AcceptEx e attenderanno fino alla ricezione di questi dati aggiuntivi. Se si verifica un timeout, la connessione viene reimpostata. Quindi, se i dati aggiuntivi sono previsti di una quantità specifica, le dimensioni del buffer devono essere impostate sulla dimensione minima del buffer più questa quantità.

Il metodo di callback di completamento deve esaminare la SocketAsyncEventArgs.SocketError proprietà per determinare se l'operazione AcceptAsync ha avuto esito positivo.

L'evento SocketAsyncEventArgs.Completed può verificarsi in alcuni casi quando non è stata accettata alcuna connessione e la SocketAsyncEventArgs.SocketError proprietà deve essere impostata su ConnectionReset. Ciò può verificarsi come risultato dell'analisi delle porte usando un'analisi dei tipi SYN mezza aperta (una sequenza SYN -> SYN-ACK -> RST). Le applicazioni che usano il AcceptAsync metodo devono essere preparate per gestire questa condizione.

Vedi anche

Si applica a

AcceptAsync(CancellationToken)

Origine:
Socket.Tasks.cs
Origine:
Socket.Tasks.cs
Origine:
Socket.Tasks.cs

Accetta una connessione in ingresso.

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)

Parametri

cancellationToken
CancellationToken

Token di annullamento che può essere usato per annullare l'operazione asincrona.

Restituisce

Attività asincrona che viene completata con il socket accettato.

Eccezioni

È stata richiesta un'operazione non valida. Questa eccezione si verifica se l'oggetto Socket preposto ad accettare la connessione non è in attesa di connessioni o se il socket accettato è associato.

È necessario chiamare il metodo Bind(EndPoint) e Listen(Int32) prima di chiamare il metodo AcceptAsync(SocketAsyncEventArgs).

Questa eccezione si verifica anche se il socket è già connesso o se un'operazione socket era già in corso utilizzando il parametro e specificato.

Si è verificato un errore durante il tentativo di accesso al socket.

L'oggetto Socket è stato chiuso.

Il token di annullamento è stato annullato. Questa eccezione viene archiviata nell'attività restituita.

Commenti

Questo metodo archivia nell'attività che restituisce tutte le eccezioni non di utilizzo che la controparte sincrona del metodo può generare. Se un'eccezione viene archiviata nell'attività restituita, tale eccezione verrà generata quando l'attività è attesa. Le eccezioni di utilizzo, ad esempio ArgumentException, vengono comunque generate in modo sincrono. Per le eccezioni archiviate, vedere le eccezioni generate da Accept().

Si applica a

AcceptAsync(Socket, CancellationToken)

Origine:
Socket.Tasks.cs
Origine:
Socket.Tasks.cs
Origine:
Socket.Tasks.cs

Accetta una connessione in ingresso.

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)

Parametri

acceptSocket
Socket

Socket da usare per accettare la connessione.

cancellationToken
CancellationToken

Token di annullamento che può essere usato per annullare l'operazione asincrona.

Restituisce

Attività asincrona che viene completata con il socket accettato.

Eccezioni

È stata richiesta un'operazione non valida. Questa eccezione si verifica se l'oggetto Socket preposto ad accettare la connessione non è in attesa di connessioni o se il socket accettato è associato.

È necessario chiamare il metodo Bind(EndPoint) e Listen(Int32) prima di chiamare il metodo AcceptAsync(SocketAsyncEventArgs).

Questa eccezione si verifica anche se il socket è già connesso o se un'operazione socket era già in corso utilizzando il parametro e specificato.

Si è verificato un errore durante il tentativo di accesso al socket.

L'oggetto Socket è stato chiuso.

Il token di annullamento è stato annullato. Questa eccezione viene archiviata nell'attività restituita.

Si applica a