Socket.AcceptAsync 方法

定義

多載

AcceptAsync()

接受連入連線。

AcceptAsync(Socket)

接受連入連線。

AcceptAsync(SocketAsyncEventArgs)

開始非同步作業以接受連入的連接嘗試。

AcceptAsync(CancellationToken)

接受連入連線。

AcceptAsync(Socket, CancellationToken)

接受連入連線。

AcceptAsync()

來源:
Socket.Tasks.cs
來源:
Socket.Tasks.cs
來源:
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 完成的非同步工作。

例外狀況

要求了無效的作業。 如果接受的 Socket 不接聽連接或接受的通訊端已繫結,就會發生這個例外狀況。

您必須先呼叫 Bind(EndPoint)Listen(Int32) 方法,再呼叫 AcceptAsync(SocketAsyncEventArgs) 方法。

此例外狀況也會在已與通訊端連線,或是通訊端作業已使用指定的 e 參數進行時發生。

嘗試存取通訊端時發生錯誤。

備註

這個方法會儲存在工作中,它會傳回方法同步對應專案可以擲回的所有非使用例外狀況。 如果例外狀況儲存在傳回的工作中,則會在等候工作時擲回該例外狀況。 使用例外狀況,例如 ArgumentException 仍會同步擲回。 如需預存例外狀況,請參閱 擲回的 Accept() 例外狀況。

適用於

AcceptAsync(Socket)

來源:
Socket.Tasks.cs
來源:
Socket.Tasks.cs
來源:
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 完成的非同步工作。

例外狀況

要求了無效的作業。 如果接受的 Socket 不接聽連接或接受的通訊端已繫結,就會發生這個例外狀況。

您必須先呼叫 Bind(EndPoint)Listen(Int32) 方法,再呼叫 AcceptAsync(SocketAsyncEventArgs) 方法。

此例外狀況也會在已與通訊端連線,或是通訊端作業已使用指定的 e 參數進行時發生。

嘗試存取通訊端時發生錯誤。

適用於

AcceptAsync(SocketAsyncEventArgs)

來源:
Socket.cs
來源:
Socket.cs
來源:
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 作業暫止,則為 true。 作業完成時會引發與 e 參數有關的 Completed 事件。

若 I/O 作業同步完成,則為 false。 不會引發與 e 參數有關的 Completed 事件,而在方法呼叫傳回後會立即檢查做為參數傳遞的 e 物件,以擷取作業的結果。

例外狀況

引數無效。 如果提供的緩衝區不夠大,就會發生這個例外狀況。 緩衝區必須至少為 2 * (sizeof(SOCKADDR_STORAGE + 16) 位元組。

如果指定多個緩衝區而 BufferList 屬性不是 null,也會發生這個例外狀況。

引數超出範圍。 如果 Count 小於 0,就會發生這個例外狀況。

要求了無效的作業。 如果接受的 Socket 不接聽連接或接受的通訊端已繫結,就會發生這個例外狀況。

您必須先呼叫 Bind(EndPoint)Listen(Int32) 方法,再呼叫 AcceptAsync(SocketAsyncEventArgs) 方法。

此例外狀況也會在已與通訊端連線,或是通訊端作業已使用指定的 e 參數進行時發生。

嘗試存取通訊端時發生錯誤。

備註

連線導向通訊協定可以使用 AcceptAsync 方法,以非同步方式處理連入連線嘗試。 以非同步方式接受連線可讓您在個別的執行執行緒內傳送和接收資料。 在呼叫 AcceptAsync 方法之前,您必須呼叫 Listen 方法來接聽和排入連入連線要求。

若要收到完成通知,您必須建立回呼方法,以實作 EventHandler < SocketAsyncEventArgs > 委派,並將其連結至 SocketAsyncEventArgs.Completed 事件。

需要物件上的 System.Net.Sockets.SocketAsyncEventArgs 下列屬性和事件:

呼叫端可以選擇性地指定要用於連入連線的現有 Socket ,方法是指定要 Socket 與 屬性搭配 SocketAsyncEventArgs.AcceptSocket 使用的 。

SocketAsyncEventArgs.AcceptSocket如果屬性為 null,則會使用與目前 Socket 相同的 AddressFamilySocketType 和 建構新的 Socket ,並 ProtocolType 設定為 SocketAsyncEventArgs.AcceptSocket 屬性。

呼叫端可以在呼叫 AcceptAsync 方法之前,將 屬性設定 SocketAsyncEventArgs.UserToken 為任何所需的使用者狀態物件,以便在回呼方法中擷取資訊。 如果回呼需要比單一物件更多的資訊,則可以建立小型類別,以將其他必要狀態資訊保存為成員。

您可以選擇性地提供緩衝區,以在方法成功之後 ConnectAsync 接收通訊端上的初始資料區塊。 在此情況下, SocketAsyncEventArgs.Buffer 屬性必須設定為緩衝區,其中包含要接收的資料,而且 SocketAsyncEventArgs.Count 屬性必須設定為緩衝區中要接收的最大位元組數目。 您可以使用 方法來設定 SocketAsyncEventArgs.SetBuffer 這些屬性。 傳入的緩衝區部分會在內部取用,以供基礎 Winsock AcceptEx 呼叫使用。 這表示傳回的資料量一律小於 SocketAsyncEventArgs.Count 所提供實例上的 System.Net.Sockets.SocketAsyncEventArgs 屬性值。 內部使用的緩衝區數量會根據通訊端的位址系列而有所不同。 所需的緩衝區大小下限為 288 個位元組。 如果指定較大的緩衝區大小,則 Socket 會預期 Winsock AcceptEx 呼叫所接收的位址資料以外的一些額外資料,並等到收到此額外資料為止。 如果發生逾時,則會重設連線。 因此,如果預期有特定數量的額外資料,則緩衝區大小應設定為最小緩衝區大小加上此數量。

完成回呼方法應該檢查 SocketAsyncEventArgs.SocketError 屬性,以判斷作業是否 AcceptAsync 成功。

SocketAsyncEventArgs.Completed在某些情況下,若未接受任何連接,且導致 SocketAsyncEventArgs.SocketError 屬性設定為 ConnectionReset ,就會發生此事件。 這可能會因為使用半開啟的 SYN 類型掃描來掃描埠, (SYN - > SYN-ACK - > RST 序列) 。 使用 AcceptAsync 方法的應用程式應該準備好處理此條件。

另請參閱

適用於

AcceptAsync(CancellationToken)

來源:
Socket.Tasks.cs
來源:
Socket.Tasks.cs
來源:
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 完成的非同步工作。

例外狀況

要求了無效的作業。 如果接受的 Socket 不接聽連接或接受的通訊端已繫結,就會發生這個例外狀況。

您必須先呼叫 Bind(EndPoint)Listen(Int32) 方法,再呼叫 AcceptAsync(SocketAsyncEventArgs) 方法。

此例外狀況也會在已與通訊端連線,或是通訊端作業已使用指定的 e 參數進行時發生。

嘗試存取通訊端時發生錯誤。

解除標記已取消。 此例外狀況會儲存在傳回的工作中。

備註

這個方法會儲存在工作中,它會傳回方法同步對應專案可以擲回的所有非使用例外狀況。 如果例外狀況儲存在傳回的工作中,則會在等候工作時擲回該例外狀況。 使用例外狀況,例如 ArgumentException 仍會同步擲回。 如需預存例外狀況,請參閱 擲回的 Accept() 例外狀況。

適用於

AcceptAsync(Socket, CancellationToken)

來源:
Socket.Tasks.cs
來源:
Socket.Tasks.cs
來源:
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 完成的非同步工作。

例外狀況

要求了無效的作業。 如果接受的 Socket 不接聽連接或接受的通訊端已繫結,就會發生這個例外狀況。

您必須先呼叫 Bind(EndPoint)Listen(Int32) 方法,再呼叫 AcceptAsync(SocketAsyncEventArgs) 方法。

此例外狀況也會在已與通訊端連線,或是通訊端作業已使用指定的 e 參數進行時發生。

嘗試存取通訊端時發生錯誤。

解除標記已取消。 此例外狀況會儲存在傳回的工作中。

適用於