Socket.AcceptAsync メソッド

定義

オーバーロード

AcceptAsync()

受信接続を受け入れます。

AcceptAsync(Socket)

受信接続を受け入れます。

AcceptAsync(SocketAsyncEventArgs)

受信接続の試行を受け入れる非同期操作を開始します。

AcceptAsync(CancellationToken)

受信接続を受け入れます。

AcceptAsync(Socket, CancellationToken)

受信接続を受け入れます。

AcceptAsync()

受信接続を受け入れます。

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 が接続をリッスンしていない場合、または受け入れられたソケットがバインドされている場合に発生します。

AcceptAsync(SocketAsyncEventArgs) メソッドを呼び出す前に、Bind(EndPoint) メソッドと Listen(Int32) メソッドを呼び出す必要があります。

この例外は、ソケットが既に接続されている、またはソケット操作が指定された e パラメーターを使用して既に進行中の場合にも発生します。

ソケットへのアクセスを試行しているときにエラーが発生しました。

Socket が閉じられました。

注釈

このメソッドは、メソッドの同期例外がスローできる非使用例外をすべて返すタスクに格納します。 返されたタスクに例外が格納されている場合、その例外はタスクが待機されたときにスローされます。 などの ArgumentException使用例外は、引き続き同期的にスローされます。 格納されている例外については、 によって Accept()スローされる例外に関するページを参照してください。

適用対象

AcceptAsync(Socket)

受信接続を受け入れます。

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 が接続をリッスンしていない場合、または受け入れられたソケットがバインドされている場合に発生します。

AcceptAsync(SocketAsyncEventArgs) メソッドを呼び出す前に、Bind(EndPoint) メソッドと Listen(Int32) メソッドを呼び出す必要があります。

この例外は、ソケットが既に接続されている、またはソケット操作が指定された e パラメーターを使用して既に進行中の場合にも発生します。

ソケットへのアクセスを試行しているときにエラーが発生しました。

Socket が閉じられました。

適用対象

AcceptAsync(SocketAsyncEventArgs)

受信接続の試行を受け入れる非同期操作を開始します。

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 が接続をリッスンしていない場合、または受け入れられたソケットがバインドされている場合に発生します。

AcceptAsync(SocketAsyncEventArgs) メソッドを呼び出す前に、Bind(EndPoint) メソッドと Listen(Int32) メソッドを呼び出す必要があります。

この例外は、ソケットが既に接続されている、またはソケット操作が指定された e パラメーターを使用して既に進行中の場合にも発生します。

ソケットへのアクセスを試行しているときにエラーが発生しました。

Socket が閉じられました。

注釈

接続指向プロトコルでは、 メソッドを AcceptAsync 使用して、着信接続の試行を非同期的に処理できます。 接続を非同期的に受け入れることで、別の実行スレッド内でデータを送受信できます。 メソッドを呼び出す前に AcceptAsync 、 メソッドを Listen 呼び出して受信接続要求をリッスンし、キューに登録する必要があります。

完了を通知するには、EventHandler<SocketAsyncEventArgs> デリゲートを実装するコールバック メソッドを作成し、イベントにフックする SocketAsyncEventArgs.Completed 必要があります。

オブジェクトの次のプロパティとイベントが System.Net.Sockets.SocketAsyncEventArgs 必要です。

呼び出し元は、必要に応じて、 プロパティでSocketAsyncEventArgs.AcceptSocket使用する を指定することで、受信接続に使用する既存Socketのものを指定Socketできます。

プロパティが SocketAsyncEventArgs.AcceptSocket null の場合、新Socketしい は、現在Socketと同じ AddressFamilySocketType、および を使用してProtocolType構築され、 プロパティとしてSocketAsyncEventArgs.AcceptSocket設定されます。

呼び出し元は、コールバック メソッドで情報を取得できるように、 メソッドをAcceptAsync呼び出す前に必要な任意のユーザー状態オブジェクトに プロパティを設定SocketAsyncEventArgs.UserTokenできます。 コールバックで 1 つのオブジェクトよりも多くの情報が必要な場合は、他の必須状態情報をメンバーとして保持する小さなクラスを作成できます。

必要に応じて、 メソッドが成功した後にソケットでデータの初期ブロックを受信するバッファーを 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)

受信接続を受け入れます。

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 が接続をリッスンしていない場合、または受け入れられたソケットがバインドされている場合に発生します。

AcceptAsync(SocketAsyncEventArgs) メソッドを呼び出す前に、Bind(EndPoint) メソッドと Listen(Int32) メソッドを呼び出す必要があります。

この例外は、ソケットが既に接続されている、またはソケット操作が指定された e パラメーターを使用して既に進行中の場合にも発生します。

ソケットへのアクセスを試行しているときにエラーが発生しました。

Socket が閉じられました。

キャンセル トークンが取り消されました。 この例外は、返されたタスクに格納されます。

注釈

このメソッドは、メソッドの同期例外がスローできる非使用例外をすべて返すタスクに格納します。 返されたタスクに例外が格納されている場合、その例外はタスクが待機されたときにスローされます。 などの ArgumentException使用例外は、引き続き同期的にスローされます。 格納されている例外については、 によって Accept()スローされる例外に関するページを参照してください。

適用対象

AcceptAsync(Socket, CancellationToken)

受信接続を受け入れます。

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 が接続をリッスンしていない場合、または受け入れられたソケットがバインドされている場合に発生します。

AcceptAsync(SocketAsyncEventArgs) メソッドを呼び出す前に、Bind(EndPoint) メソッドと Listen(Int32) メソッドを呼び出す必要があります。

この例外は、ソケットが既に接続されている、またはソケット操作が指定された e パラメーターを使用して既に進行中の場合にも発生します。

ソケットへのアクセスを試行しているときにエラーが発生しました。

Socket が閉じられました。

キャンセル トークンが取り消されました。 この例外は、返されたタスクに格納されます。

適用対象