Condividi tramite


Socket.AcceptAsync Metodo

Definizione

Overload

Nome Descrizione
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
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'accettazione Socket non è in ascolto delle connessioni o se il socket accettato è associato.

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

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
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 utilizzare 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'accettazione Socket non è in ascolto delle connessioni o se il socket accettato è associato.

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

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
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. L'evento Completed sul e parametro verrà generato al termine dell'operazione.

false se l'operazione di I/O è stata completata in modo sincrono. L'evento Completed sul e parametro non verrà generato e l'oggetto e passato come parametro può essere esaminato immediatamente dopo il ritorno della chiamata al metodo per recuperare il risultato dell'operazione.

Eccezioni

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

Questa eccezione si verifica anche se vengono specificati più buffer, la BufferList proprietà non è Null.

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

È stata richiesta un'operazione non valida. Questa eccezione si verifica se l'accettazione Socket non è in ascolto delle connessioni o se il socket accettato è associato.

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

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

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 di connessioni in modo asincrono consente di inviare e ricevere dati all'interno di un thread di esecuzione separato. Prima di chiamare il AcceptAsync metodo , è necessario chiamare il Listen metodo per restare in ascolto e accodare le richieste di connessione in ingresso.

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

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

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

Se la SocketAsyncEventArgs.AcceptSocket proprietà è Null, viene costruito un nuovo Socket oggetto con lo stesso AddressFamilyoggetto , SocketTypee ProtocolType come corrente Socket e 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 di piccole dimensioni per contenere le altre informazioni sullo stato necessarie come membri.

Facoltativamente, è possibile specificare un buffer in cui ricevere il blocco iniziale di dati nel socket dopo che il ConnectAsync metodo ha avuto 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à utilizzata 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. La dimensione minima del buffer necessaria è di 288 byte. Se si specifica una dimensione del buffer maggiore, si Socket prevede che alcuni dati aggiuntivi diversi dai dati dell'indirizzo ricevuti dalla chiamata AcceptEx di Winsock attenderanno fino a quando non vengono ricevuti dati aggiuntivi. Se si verifica un timeout, la connessione viene reimpostata. Pertanto, se sono previsti dati aggiuntivi 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 tramite un'analisi dei tipi SYN semi-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
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'accettazione Socket non è in ascolto delle connessioni o se il socket accettato è associato.

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

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
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 utilizzare 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'accettazione Socket non è in ascolto delle connessioni o se il socket accettato è associato.

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

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