通过


Socket.AcceptAsync 方法

定义

重载

名称 说明
AcceptAsync()

接受传入连接。

AcceptAsync(Socket)

接受传入连接。

AcceptAsync(SocketAsyncEventArgs)

开始异步操作以接受传入的连接尝试。

AcceptAsync(CancellationToken)

接受传入连接。

AcceptAsync(Socket, CancellationToken)

接受传入连接。

AcceptAsync()

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

接受传入连接。

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)

返回

使用接受的套接字完成的异步任务。

例外

请求了无效的操作。 如果接受 Socket 未侦听连接或接受的套接字绑定,则会发生此异常。

在调用该方法之前,必须调用Bind(EndPoint)AcceptAsync(SocketAsyncEventArgs)该方法和Listen(Int32)方法。

尝试访问套接字时出错。

注解

此方法存储在任务中,它返回该方法的同步对应项可以引发的所有非使用异常。 如果异常存储在返回的任务中,则等待任务时将引发该异常。 使用情况异常(例如 ArgumentException)仍会同步引发。 有关存储的异常,请参阅由 Accept()..

适用于

AcceptAsync(Socket)

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

接受传入连接。

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)

参数

acceptSocket
Socket

用于接受连接的套接字。

返回

使用接受的套接字完成的异步任务。

例外

请求了无效的操作。 如果接受 Socket 未侦听连接或接受的套接字绑定,则会发生此异常。

在调用该方法之前,必须调用Bind(EndPoint)AcceptAsync(SocketAsyncEventArgs)该方法和Listen(Int32)方法。

尝试访问套接字时出错。

适用于

AcceptAsync(SocketAsyncEventArgs)

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

开始异步操作以接受传入的连接尝试。

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

参数

e
SocketAsyncEventArgs

SocketAsyncEventArgs要用于此异步套接字作的对象。

返回

如果 I/O作挂起,则为 Completed完成作后,将引发参数上的e事件。

false 如果 I/O作同步完成,则为 。 Completed不会引发参数上的e事件,在e方法调用返回以检索操作结果后,可以立即检查作为参数传递的对象。

例外

参数无效。 如果提供的缓冲区不够大,则会发生此异常。 缓冲区必须至少为 2 * (sizeof(SOCKADDR_STORAGE + 16)字节。

如果指定了多个缓冲区,则该 BufferList 属性不为 null,则也会发生此异常。

参数的范围不足。 如果小于 0, Count 则会发生异常。

请求了无效的操作。 如果接受 Socket 未侦听连接或接受的套接字绑定,则会发生此异常。

在调用该方法之前,必须调用Bind(EndPoint)AcceptAsync(SocketAsyncEventArgs)该方法和Listen(Int32)方法。

如果套接字已连接或套接字操作已在使用指定的 e 参数进行中,则也会发生此异常。

尝试访问套接字时出错。

注解

面向连接的协议可以使用该方法 AcceptAsync 异步处理传入的连接尝试。 通过异步方式接受连接,可以在单独的执行线程中发送和接收数据。 在调用 AcceptAsync 该方法之前,必须调用 Listen 该方法来侦听和排队传入连接请求。

若要收到完成通知,必须创建实现 EventHandler<SocketAsyncEventArgs> 委托并将其挂钩到事件的 SocketAsyncEventArgs.Completed 回调方法。

对象上的 System.Net.Sockets.SocketAsyncEventArgs 以下属性和事件是必需的:

调用方可以通过指定要SocketSocketAsyncEventArgs.AcceptSocket属性一起使用来指定要用于传入连接的现有Socket调用方。

SocketAsyncEventArgs.AcceptSocket如果该属性为 null,则使用相同的SocketTypeAddressFamily值构造一个新Socket属性,以及ProtocolType当前Socket属性和设置为SocketAsyncEventArgs.AcceptSocket该属性。

调用方可以在调用SocketAsyncEventArgs.UserToken该方法之前将AcceptAsync属性设置为所需的任何用户状态对象,以便在回调方法中检索信息。 如果回调需要比单个对象更多的信息,则可以创建一个小类来将其他必需的状态信息保存为成员。

(可选)可以提供一个缓冲区,在方法成功后 ConnectAsync 接收套接字上的初始数据块。 在这种情况下,需要将 SocketAsyncEventArgs.Buffer 属性设置为包含要接收的数据的缓冲区,并且 SocketAsyncEventArgs.Count 该属性需要设置为要在缓冲区中接收的最大数据字节数。 可以使用该方法设置 SocketAsyncEventArgs.SetBuffer 这些属性。 传入的缓冲区的一部分将在内部使用,供基础 Winsock AcceptEx 调用使用。 这意味着返回的数据量将始终小于提供的实例的属性System.Net.Sockets.SocketAsyncEventArgs的值SocketAsyncEventArgs.Count。 内部使用的缓冲区量因套接字的地址系列而异。 所需的最小缓冲区大小为 288 字节。 如果指定了更大的缓冲区大小,则 Socket 预期 Winsock AcceptEx 调用收到的地址数据以外的其他一些额外数据,并会等到收到此额外数据。 如果发生超时,连接将重置。 因此,如果预期额外数据量为特定量,则应将缓冲区大小设置为最小缓冲区大小加上此量。

完成回调方法应检查 SocketAsyncEventArgs.SocketError 属性以确定操作是否 AcceptAsync 成功。

SocketAsyncEventArgs.Completed在某些情况下,当未接受连接并导致SocketAsyncEventArgs.SocketError属性设置为ConnectionReset时,可能会发生该事件。 这可能会导致端口扫描使用半打开的 SYN 类型扫描(SYN -> SYN-ACK -> RST 序列)。 应准备好使用 AcceptAsync 该方法的应用程序来处理此条件。

另请参阅

适用于

AcceptAsync(CancellationToken)

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

接受传入连接。

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)

参数

cancellationToken
CancellationToken

可用于取消异步作的取消令牌。

返回

使用接受的套接字完成的异步任务。

例外

请求了无效的操作。 如果接受 Socket 未侦听连接或接受的套接字绑定,则会发生此异常。

在调用该方法之前,必须调用Bind(EndPoint)AcceptAsync(SocketAsyncEventArgs)该方法和Listen(Int32)方法。

尝试访问套接字时出错。

取消令牌已取消。 此异常存储在返回的任务中。

注解

此方法存储在任务中,它返回该方法的同步对应项可以引发的所有非使用异常。 如果异常存储在返回的任务中,则等待任务时将引发该异常。 使用情况异常(例如 ArgumentException)仍会同步引发。 有关存储的异常,请参阅由 Accept()..

适用于

AcceptAsync(Socket, CancellationToken)

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

接受传入连接。

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)

参数

acceptSocket
Socket

用于接受连接的套接字。

cancellationToken
CancellationToken

可用于取消异步作的取消令牌。

返回

使用接受的套接字完成的异步任务。

例外

请求了无效的操作。 如果接受 Socket 未侦听连接或接受的套接字绑定,则会发生此异常。

在调用该方法之前,必须调用Bind(EndPoint)AcceptAsync(SocketAsyncEventArgs)该方法和Listen(Int32)方法。

尝试访问套接字时出错。

取消令牌已取消。 此异常存储在返回的任务中。

适用于