Compartir por


Socket.AcceptAsync Método

Definición

Sobrecargas

Nombre Description
AcceptAsync()

Acepta una conexión entrante.

AcceptAsync(Socket)

Acepta una conexión entrante.

AcceptAsync(SocketAsyncEventArgs)

Comienza una operación asincrónica para aceptar un intento de conexión entrante.

AcceptAsync(CancellationToken)

Acepta una conexión entrante.

AcceptAsync(Socket, CancellationToken)

Acepta una conexión entrante.

AcceptAsync()

Source:
Socket.Tasks.cs
Source:
Socket.Tasks.cs
Source:
Socket.Tasks.cs
Source:
Socket.Tasks.cs
Source:
Socket.Tasks.cs

Acepta una conexión entrante.

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)

Devoluciones

Tarea asincrónica que se completa con el socket aceptado.

Excepciones

Se solicitó una operación no válida. Esta excepción se produce si la aceptación Socket no escucha conexiones o el socket aceptado está enlazado.

Debe llamar al Bind(EndPoint) método y Listen(Int32) antes de llamar al AcceptAsync(SocketAsyncEventArgs) método .

Error al intentar acceder al socket.

Comentarios

Este método almacena en la tarea que devuelve todas las excepciones de no uso que puede producir el homólogo sincrónico del método. Si se almacena una excepción en la tarea devuelta, se producirá esa excepción cuando se espere la tarea. Las excepciones de uso, como ArgumentException, todavía se producen sincrónicamente. Para las excepciones almacenadas, consulte las excepciones producidas por Accept().

Se aplica a

AcceptAsync(Socket)

Source:
Socket.Tasks.cs
Source:
Socket.Tasks.cs
Source:
Socket.Tasks.cs
Source:
Socket.Tasks.cs
Source:
Socket.Tasks.cs

Acepta una conexión entrante.

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

Socket que se va a usar para aceptar la conexión.

Devoluciones

Tarea asincrónica que se completa con el socket aceptado.

Excepciones

Se solicitó una operación no válida. Esta excepción se produce si la aceptación Socket no escucha conexiones o el socket aceptado está enlazado.

Debe llamar al Bind(EndPoint) método y Listen(Int32) antes de llamar al AcceptAsync(SocketAsyncEventArgs) método .

Error al intentar acceder al socket.

Se aplica a

AcceptAsync(SocketAsyncEventArgs)

Source:
Socket.cs
Source:
Socket.cs
Source:
Socket.cs
Source:
Socket.cs
Source:
Socket.cs

Comienza una operación asincrónica para aceptar un intento de conexión entrante.

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

Objeto SocketAsyncEventArgs que se va a usar para esta operación de socket asincrónico.

Devoluciones

true si la operación de E/S está pendiente. El Completed evento en el e parámetro se generará tras la finalización de la operación.

false si la operación de E/S se completó sincrónicamente. El Completed evento del e parámetro no se generará y el e objeto pasado como parámetro se puede examinar inmediatamente después de que la llamada al método devuelva para recuperar el resultado de la operación.

Excepciones

Un argumento no es válido. Esta excepción se produce si el búfer proporcionado no es lo suficientemente grande. El búfer debe tener al menos 2 * (sizeof(SOCKADDR_STORAGE + 16)) bytes.

Esta excepción también se produce si se especifican varios búferes, la BufferList propiedad no es null.

Un argumento está fuera del intervalo. La excepción se produce si es Count menor que 0.

Se solicitó una operación no válida. Esta excepción se produce si la aceptación Socket no escucha conexiones o el socket aceptado está enlazado.

Debe llamar al Bind(EndPoint) método y Listen(Int32) antes de llamar al AcceptAsync(SocketAsyncEventArgs) método .

Esta excepción también se produce si el socket ya está conectado o una operación de socket ya estaba en curso mediante el parámetro especificado e .

Error al intentar acceder al socket.

Comentarios

Los protocolos orientados a la conexión pueden usar el AcceptAsync método para procesar de forma asincrónica los intentos de conexión entrantes. Aceptar conexiones de forma asincrónica permite enviar y recibir datos dentro de un subproceso de ejecución independiente. Antes de llamar al AcceptAsync método , debe llamar al Listen método para escuchar y poner en cola las solicitudes de conexión entrantes.

Para recibir una notificación de finalización, debe crear un método de devolución de llamada que implemente el delegado EventHandler<SocketAsyncEventArgs> y enlazarlo al SocketAsyncEventArgs.Completed evento.

Se requieren las siguientes propiedades y eventos en el System.Net.Sockets.SocketAsyncEventArgs objeto:

El autor de la llamada puede especificar opcionalmente un existente Socket que se va a usar para la conexión entrante especificando el objeto Socket que se va a usar con la SocketAsyncEventArgs.AcceptSocket propiedad .

Si la SocketAsyncEventArgs.AcceptSocket propiedad es null, se construye un nuevo Socket con el mismo AddressFamily, SocketTypey ProtocolType que el actual Socket y se establece como la SocketAsyncEventArgs.AcceptSocket propiedad .

El autor de la llamada puede establecer la SocketAsyncEventArgs.UserToken propiedad en cualquier objeto de estado de usuario deseado antes de llamar al AcceptAsync método , de modo que la información se pueda recuperar en el método de devolución de llamada. Si la devolución de llamada necesita más información que un único objeto, se puede crear una clase pequeña para contener la otra información de estado necesaria como miembros.

Opcionalmente, se puede proporcionar un búfer en el que recibir el bloque inicial de datos en el socket después de que el ConnectAsync método se realice correctamente. En este caso, la SocketAsyncEventArgs.Buffer propiedad debe establecerse en el búfer que contiene los datos que se van a recibir y la SocketAsyncEventArgs.Count propiedad debe establecerse en el número máximo de bytes de datos que se van a recibir en el búfer. Estas propiedades se pueden establecer mediante el SocketAsyncEventArgs.SetBuffer método . Parte del búfer pasado se consumirá internamente para que lo use la llamada AcceptEx subyacente de Winsock. Esto significa que la cantidad de datos devueltos siempre será menor que el valor de la SocketAsyncEventArgs.Count propiedad en la System.Net.Sockets.SocketAsyncEventArgs instancia proporcionada. La cantidad del búfer utilizado internamente varía en función de la familia de direcciones del socket. El tamaño mínimo del búfer necesario es de 288 bytes. Si se especifica un tamaño de búfer mayor, Socket se esperarán algunos datos adicionales que no sean los datos de dirección recibidos por la llamada Winsock AcceptEx y esperarán hasta que se reciban estos datos adicionales. Si se produce un tiempo de espera, se restablece la conexión. Por lo tanto, si se esperan datos adicionales de una cantidad específica, el tamaño del búfer debe establecerse en el tamaño mínimo del búfer más esta cantidad.

El método de devolución de llamada de finalización debe examinar la SocketAsyncEventArgs.SocketError propiedad para determinar si la AcceptAsync operación se realizó correctamente.

El SocketAsyncEventArgs.Completed evento puede producirse en algunos casos cuando no se ha aceptado ninguna conexión y provocar que la SocketAsyncEventArgs.SocketError propiedad se establezca ConnectionReseten . Esto puede producirse como resultado del examen de puertos mediante un examen de tipo SYN medio abierto (una secuencia SYN -> SYN-ACK -> RST). Las aplicaciones que usan el AcceptAsync método deben estar preparadas para controlar esta condición.

Consulte también

Se aplica a

AcceptAsync(CancellationToken)

Source:
Socket.Tasks.cs
Source:
Socket.Tasks.cs
Source:
Socket.Tasks.cs
Source:
Socket.Tasks.cs
Source:
Socket.Tasks.cs

Acepta una conexión entrante.

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

Token de cancelación que se puede usar para cancelar la operación asincrónica.

Devoluciones

Tarea asincrónica que se completa con el socket aceptado.

Excepciones

Se solicitó una operación no válida. Esta excepción se produce si la aceptación Socket no escucha conexiones o el socket aceptado está enlazado.

Debe llamar al Bind(EndPoint) método y Listen(Int32) antes de llamar al AcceptAsync(SocketAsyncEventArgs) método .

Error al intentar acceder al socket.

Se canceló el token de cancelación. Esta excepción se almacena en la tarea devuelta.

Comentarios

Este método almacena en la tarea que devuelve todas las excepciones de no uso que puede producir el homólogo sincrónico del método. Si se almacena una excepción en la tarea devuelta, se producirá esa excepción cuando se espere la tarea. Las excepciones de uso, como ArgumentException, todavía se producen sincrónicamente. Para las excepciones almacenadas, consulte las excepciones producidas por Accept().

Se aplica a

AcceptAsync(Socket, CancellationToken)

Source:
Socket.Tasks.cs
Source:
Socket.Tasks.cs
Source:
Socket.Tasks.cs
Source:
Socket.Tasks.cs
Source:
Socket.Tasks.cs

Acepta una conexión entrante.

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

Socket que se va a usar para aceptar la conexión.

cancellationToken
CancellationToken

Token de cancelación que se puede usar para cancelar la operación asincrónica.

Devoluciones

Tarea asincrónica que se completa con el socket aceptado.

Excepciones

Se solicitó una operación no válida. Esta excepción se produce si la aceptación Socket no escucha conexiones o el socket aceptado está enlazado.

Debe llamar al Bind(EndPoint) método y Listen(Int32) antes de llamar al AcceptAsync(SocketAsyncEventArgs) método .

Error al intentar acceder al socket.

Se canceló el token de cancelación. Esta excepción se almacena en la tarea devuelta.

Se aplica a