Socket.AcceptAsync Método

Definição

Sobrecargas

AcceptAsync()

Aceita uma conexão de entrada.

AcceptAsync(Socket)

Aceita uma conexão de entrada.

AcceptAsync(SocketAsyncEventArgs)

Inicia uma operação assíncrona para aceitar uma tentativa de conexão de entrada.

AcceptAsync(CancellationToken)

Aceita uma conexão de entrada.

AcceptAsync(Socket, CancellationToken)

Aceita uma conexão de entrada.

AcceptAsync()

Origem:
Socket.Tasks.cs
Origem:
Socket.Tasks.cs
Origem:
Socket.Tasks.cs

Aceita uma conexão de entrada.

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)

Retornos

Uma tarefa assíncrona que é concluída com o Soquete aceito.

Exceções

Uma operação inválida foi solicitada. Essa exceção ocorre se o Socket aceito não estiver escutando conexões ou se o soquete aceito estiver associado.

Você deve chamar o método Bind(EndPoint) e Listen(Int32) antes de chamar o método AcceptAsync(SocketAsyncEventArgs).

Essa exceção também ocorre se o soquete já estiver conectado ou se uma operação de soquete já estivesse em andamento usando o parâmetro e especificado.

Ocorreu um erro ao tentar acessar o soquete.

Comentários

Esse método armazena na tarefa que retorna todas as exceções de não uso que o equivalente síncrono do método pode gerar. Se uma exceção for armazenada na tarefa retornada, essa exceção será gerada quando a tarefa for aguardada. Exceções de uso, como ArgumentException, ainda são geradas de forma síncrona. Para as exceções armazenadas, consulte as exceções geradas por Accept().

Aplica-se a

AcceptAsync(Socket)

Origem:
Socket.Tasks.cs
Origem:
Socket.Tasks.cs
Origem:
Socket.Tasks.cs

Aceita uma conexão de entrada.

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)

Parâmetros

acceptSocket
Socket

O soquete a ser usado para aceitar a conexão.

Retornos

Uma tarefa assíncrona que é concluída com o Soquete aceito.

Exceções

Uma operação inválida foi solicitada. Essa exceção ocorre se o Socket aceito não estiver escutando conexões ou se o soquete aceito estiver associado.

Você deve chamar o método Bind(EndPoint) e Listen(Int32) antes de chamar o método AcceptAsync(SocketAsyncEventArgs).

Essa exceção também ocorre se o soquete já estiver conectado ou se uma operação de soquete já estivesse em andamento usando o parâmetro e especificado.

Ocorreu um erro ao tentar acessar o soquete.

Aplica-se a

AcceptAsync(SocketAsyncEventArgs)

Origem:
Socket.cs
Origem:
Socket.cs
Origem:
Socket.cs

Inicia uma operação assíncrona para aceitar uma tentativa de conexão de entrada.

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

Parâmetros

e
SocketAsyncEventArgs

O objeto SocketAsyncEventArgs a ser usado nessa operação de soquete assíncrono.

Retornos

true se a operação de E/S está pendente. O evento Completed no parâmetro e será acionado após a conclusão da operação.

false se a operação de E/S foi concluída de forma síncrona. O evento Completed no parâmetro e não será acionado e o objeto e passado como um parâmetro poderá ser examinado imediatamente depois que a chamada do método for retornada para recuperar o resultado da operação.

Exceções

Um argumento não é válido. Essa exceção ocorre se o buffer fornecido não for grande o suficiente. O buffer deve ter pelo menos 2 * (sizeof(SOCKADDR_STORAGE + 16) bytes.

Essa exceção também ocorre se vários buffers forem especificados e a propriedade BufferList não for nula.

Um argumento está fora do intervalo. A exceção ocorre se o Count for menor que 0.

Uma operação inválida foi solicitada. Essa exceção ocorre se o Socket aceito não estiver escutando conexões ou se o soquete aceito estiver associado.

Você deve chamar o método Bind(EndPoint) e Listen(Int32) antes de chamar o método AcceptAsync(SocketAsyncEventArgs).

Essa exceção também ocorre se o soquete já estiver conectado ou se uma operação de soquete já estivesse em andamento usando o parâmetro e especificado.

Ocorreu um erro ao tentar acessar o soquete.

Comentários

Os protocolos orientados à conexão podem usar o AcceptAsync método para processar as tentativas de conexão de entrada de forma assíncrona. Aceitar conexões de forma assíncrona oferece a capacidade de enviar e receber dados em um thread de execução separado. Antes de chamar o AcceptAsync método , você deve chamar o Listen método para escutar e enfileirar solicitações de conexão de entrada.

Para ser notificado sobre a conclusão, você deve criar um método de retorno de chamada que implemente o delegado EventHandler<SocketAsyncEventArgs> e conecte-o ao SocketAsyncEventArgs.Completed evento.

As seguintes propriedades e eventos no System.Net.Sockets.SocketAsyncEventArgs objeto são necessários:

Opcionalmente, o chamador pode especificar um existente Socket a ser usado para a conexão de entrada especificando o Socket a ser usado com a SocketAsyncEventArgs.AcceptSocket propriedade .

Se a SocketAsyncEventArgs.AcceptSocket propriedade for nula, um novo Socket será construído com o mesmo AddressFamily, SocketTypee ProtocolType como o atual Socket e definido como a SocketAsyncEventArgs.AcceptSocket propriedade .

O chamador pode definir a SocketAsyncEventArgs.UserToken propriedade como qualquer objeto de estado de usuário desejado antes de chamar o AcceptAsync método, para que as informações sejam recuperadas no método de retorno de chamada. Se o retorno de chamada precisar de mais informações do que um único objeto, uma classe pequena poderá ser criada para manter as outras informações de estado necessárias como membros.

Opcionalmente, um buffer pode ser fornecido para receber o bloco inicial de dados no soquete depois que o ConnectAsync método for bem-sucedido. Nesse caso, a SocketAsyncEventArgs.Buffer propriedade precisa ser definida como o buffer que contém os dados a serem recebidos e a SocketAsyncEventArgs.Count propriedade precisa ser definida como o número máximo de bytes de dados a serem recebidos no buffer. Essas propriedades podem ser definidas usando o SocketAsyncEventArgs.SetBuffer método . Parte do buffer passado será consumida internamente para uso pela chamada AcceptEx do Winsock subjacente. Isso significa que a quantidade de dados retornados sempre será menor que o valor da SocketAsyncEventArgs.Count propriedade na System.Net.Sockets.SocketAsyncEventArgs instância fornecida. A quantidade do buffer usado internamente varia de acordo com a família de endereços do soquete. O tamanho mínimo do buffer necessário é de 288 bytes. Se um tamanho de buffer maior for especificado, o Socket esperará alguns dados extras além dos dados de endereço recebidos pela chamada Winsock AcceptEx e aguardará até que esses dados extras sejam recebidos. Se ocorrer um tempo limite, a conexão será redefinida. Portanto, se forem esperados dados extras de um valor específico, o tamanho do buffer deverá ser definido como o tamanho mínimo do buffer mais esse valor.

O método de retorno de chamada de conclusão deve examinar a SocketAsyncEventArgs.SocketError propriedade para determinar se a AcceptAsync operação foi bem-sucedida.

O SocketAsyncEventArgs.Completed evento pode ocorrer em alguns casos quando nenhuma conexão foi aceita e fazer com que a SocketAsyncEventArgs.SocketError propriedade seja definida ConnectionResetcomo . Isso pode ocorrer como resultado da verificação de porta usando uma verificação de tipo SYN semiaberto (uma sequência SYN -> SYN-ACK -> RST). Os aplicativos que usam o AcceptAsync método devem estar preparados para lidar com essa condição.

Confira também

Aplica-se a

AcceptAsync(CancellationToken)

Origem:
Socket.Tasks.cs
Origem:
Socket.Tasks.cs
Origem:
Socket.Tasks.cs

Aceita uma conexão de entrada.

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)

Parâmetros

cancellationToken
CancellationToken

Um token de cancelamento que pode ser usado para cancelar a operação assíncrona.

Retornos

Uma tarefa assíncrona que é concluída com o Soquete aceito.

Exceções

Uma operação inválida foi solicitada. Essa exceção ocorre se o Socket aceito não estiver escutando conexões ou se o soquete aceito estiver associado.

Você deve chamar o método Bind(EndPoint) e Listen(Int32) antes de chamar o método AcceptAsync(SocketAsyncEventArgs).

Essa exceção também ocorre se o soquete já estiver conectado ou se uma operação de soquete já estivesse em andamento usando o parâmetro e especificado.

Ocorreu um erro ao tentar acessar o soquete.

O token de cancelamento foi cancelado. Essa exceção é armazenada na tarefa retornada.

Comentários

Esse método armazena na tarefa que retorna todas as exceções de não uso que o equivalente síncrono do método pode gerar. Se uma exceção for armazenada na tarefa retornada, essa exceção será gerada quando a tarefa for aguardada. Exceções de uso, como ArgumentException, ainda são geradas de forma síncrona. Para as exceções armazenadas, consulte as exceções geradas por Accept().

Aplica-se a

AcceptAsync(Socket, CancellationToken)

Origem:
Socket.Tasks.cs
Origem:
Socket.Tasks.cs
Origem:
Socket.Tasks.cs

Aceita uma conexão de entrada.

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)

Parâmetros

acceptSocket
Socket

O soquete a ser usado para aceitar a conexão.

cancellationToken
CancellationToken

Um token de cancelamento que pode ser usado para cancelar a operação assíncrona.

Retornos

Uma tarefa assíncrona que é concluída com o Soquete aceito.

Exceções

Uma operação inválida foi solicitada. Essa exceção ocorre se o Socket aceito não estiver escutando conexões ou se o soquete aceito estiver associado.

Você deve chamar o método Bind(EndPoint) e Listen(Int32) antes de chamar o método AcceptAsync(SocketAsyncEventArgs).

Essa exceção também ocorre se o soquete já estiver conectado ou se uma operação de soquete já estivesse em andamento usando o parâmetro e especificado.

Ocorreu um erro ao tentar acessar o soquete.

O token de cancelamento foi cancelado. Essa exceção é armazenada na tarefa retornada.

Aplica-se a