Socket.AcceptAsync(SocketAsyncEventArgs) Socket.AcceptAsync(SocketAsyncEventArgs) Socket.AcceptAsync(SocketAsyncEventArgs) Socket.AcceptAsync(SocketAsyncEventArgs) Method

定義

受信接続の試行を受け入れる非同期操作を開始します。Begins an asynchronous operation to accept an incoming connection attempt.

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 SocketAsyncEventArgs SocketAsyncEventArgs

この非同期ソケット操作に使用する SocketAsyncEventArgs オブジェクト。The SocketAsyncEventArgs object to use for this asynchronous socket operation.

戻り値

I/O 操作が保留中の場合は truetrue if the I/O operation is pending. 操作の完了時に、e パラメーターの Completed イベントが発生します。The Completed event on the e parameter will be raised upon completion of the operation.

I/O 操作が同期的に完了した場合は falsefalse if the I/O operation completed synchronously. この場合、e パラメーターの Completed イベントは発生しません。メソッド呼び出しから制御が戻った直後に、パラメーターとして渡された e オブジェクトを調べて操作の結果を取得できます。The Completed event on the e parameter will not be raised and the e object passed as a parameter may be examined immediately after the method call returns to retrieve the result of the operation.

例外

引数が有効ではありません。An argument is not valid. この例外は、提供されたバッファーのサイズが不足している場合に発生します。This exception occurs if the buffer provided is not large enough. バッファーは、2 * (sizeof(SOCKADDR_STORAGE + 16) バイト以上であることが必要です。The buffer must be at least 2 * (sizeof(SOCKADDR_STORAGE + 16) bytes.

この例外は、複数のバッファーが指定されているときに、BufferList プロパティが null 値ではない場合にも発生します。This exception also occurs if multiple buffers are specified, the BufferList property is not null.

引数が範囲外です。An argument is out of range. この例外は、Count が 0 未満の場合に発生します。The exception occurs if the Count is less than 0.

無効な操作が要求されました。An invalid operation was requested. この例外は、受け入れ側の Socket が接続をリッスンしていない場合、または受け入れられたソケットがバインドされている場合に発生します。This exception occurs if the accepting Socket is not listening for connections or the accepted socket is bound.

AcceptAsync(SocketAsyncEventArgs) メソッドを呼び出す前に、Bind(EndPoint) メソッドと Listen(Int32) メソッドを呼び出す必要があります。You must call the Bind(EndPoint) and Listen(Int32) method before calling the AcceptAsync(SocketAsyncEventArgs) method.

この例外は、ソケットが既に接続されている、またはソケット操作が指定された e パラメーターを使用して既に進行中の場合にも発生します。This exception also occurs if the socket is already connected or a socket operation was already in progress using the specified e parameter.

ソケットへのアクセスを試行しているときにエラーが発生しました。An error occurred when attempting to access the socket.

このメソッドには Windows XP 以降が必要です。Windows XP or later is required for this method.

注釈

接続指向プロトコルを使用できる、AcceptAsyncメソッドを非同期的に受信接続を処理しようとします。Connection-oriented protocols can use the AcceptAsync method to asynchronously process incoming connection attempts. 非同期的に接続を受け入れると、個別の実行スレッド内でデータを送受信する機能を提供します。Accepting connections asynchronously gives you the ability to send and receive data within a separate execution thread. 呼び出しの前に、AcceptAsyncメソッドを呼び出す必要があります、Listenをリッスンし、キューの受信接続要求メソッド。Before calling the AcceptAsync method, you must call the Listen method to listen for and queue incoming connection requests.

完了の通知、イベント ハンドラーを実装するコールバック メソッドを作成する必要があります<SocketAsyncEventArgs > を委任し、それをSocketAsyncEventArgs.Completedイベント。To be notified of completion, you must create a callback method that implements the EventHandler<SocketAsyncEventArgs> delegate and hook it to the SocketAsyncEventArgs.Completed event.

次のプロパティとイベントをSystem.Net.Sockets.SocketAsyncEventArgsオブジェクトが必要です。The following properties and events on the System.Net.Sockets.SocketAsyncEventArgs object are required:

呼び出し元は、既存の必要に応じて指定できますSocketを指定して、着信接続に使用する、Socketで使用する、SocketAsyncEventArgs.AcceptSocketプロパティ。The caller can optionally specify an existing Socket to use for the incoming connection by specifying the Socket to use with the SocketAsyncEventArgs.AcceptSocket property.

場合、SocketAsyncEventArgs.AcceptSocketプロパティが null の場合、新しいSocketが同じで構築されてAddressFamilySocketType、およびProtocolType現在Socketとして設定し、SocketAsyncEventArgs.AcceptSocketプロパティ。If the SocketAsyncEventArgs.AcceptSocket property is null, a new Socket is constructed with the same AddressFamily, SocketType, and ProtocolType as the current Socket and set as the SocketAsyncEventArgs.AcceptSocket property.

呼び出し元の設定、SocketAsyncEventArgs.UserTokenを呼び出す前に必要なすべてのユーザー状態オブジェクトのプロパティ、AcceptAsyncメソッド情報をコールバック メソッドで取得できるようにします。The caller may set the SocketAsyncEventArgs.UserToken property to any user state object desired before calling the AcceptAsync method, so that the information will be retrievable in the callback method. コールバックは、1 つのオブジェクトより多くの情報を必要とする場合は、メンバーとして他の必要な状態情報を保持する小さなクラスを作成できます。If the callback needs more information than a single object, a small class can be created to hold the other required state information as members.

必要に応じて、後にソケット上のデータの最初のブロックを受信するバッファーを指定することがあります、ConnectAsyncメソッドが成功しました。Optionally, a buffer may be provided in which to receive the initial block of data on the socket after the ConnectAsync method succeeds. ここで、SocketAsyncEventArgs.Bufferプロパティを受信するデータを含むバッファーに設定する必要があります、SocketAsyncEventArgs.Countプロパティは、バッファーを受信するデータのバイトの最大数に設定する必要があります。In this case, the SocketAsyncEventArgs.Buffer property needs to be set to the buffer containing the data to receive and the SocketAsyncEventArgs.Count property needs to be set to the maximum number of bytes of data to receive in the buffer. 使用して、これらのプロパティを設定することができます、SocketAsyncEventArgs.SetBufferメソッド。These properties can be set using the SocketAsyncEventArgs.SetBuffer method. 渡されたバッファーの一部で使用される内部的に使用するため、基になる Winsock AcceptEx 呼び出し。Part of the buffer passed in will be consumed internally for use by the underlying Winsock AcceptEx call. つまり、返されるデータ量が常の値より小さい、SocketAsyncEventArgs.CountプロパティをSystem.Net.Sockets.SocketAsyncEventArgs指定されたインスタンス。This means that the amount of data returned will always be less than the value of the SocketAsyncEventArgs.Count property on the System.Net.Sockets.SocketAsyncEventArgs instance provided. 内部的に使用されるバッファーの量は、ソケットのアドレス ファミリによって異なります。The amount of the buffer used internally varies based on the address family of the socket. 必要な最小バッファー サイズは、288 バイトです。The minimum buffer size required is 288 bytes. 大きなバッファー サイズが指定されている場合、 Socket Winsock AcceptEx 呼び出しで受信したアドレス データ以外のいくつかの余分なデータを求めるし、この余分なデータを受信するまで待機します。If a larger buffer size is specified, then the Socket will expect some extra data other than the address data received by the Winsock AcceptEx call and will wait until this extra data is received. タイムアウトが発生する場合は、接続がリセットされます。If a timeout occurs, the connection is reset. その追加のデータは、特定の金額の予測されますが場合に、最小バッファー サイズにこの量が加わりますバッファー サイズを設定する必要があります。So if extra data is expected of a specific amount, then the buffer size should be set to the minimum buffer size plus this amount.

完了コールバック メソッドを調べる必要があります、SocketAsyncEventArgs.SocketErrorプロパティかどうかをAcceptAsync操作は成功しました。The completion callback method should examine the SocketAsyncEventArgs.SocketError property to determine if the AcceptAsync operation was successful.

SocketAsyncEventArgs.Completedイベントは接続が許可されていないときに、いくつかの場合に発生して、原因、SocketAsyncEventArgs.SocketErrorプロパティを設定するConnectionResetします。The SocketAsyncEventArgs.Completed event can occur in some cases when no connection has been accepted and cause the SocketAsyncEventArgs.SocketError property to be set to ConnectionReset. これは、ポートをハーフ オープン SYN の種類のスキャンを使用してスキャンの結果として発生 (SYN SYN ACK]-> [RST のシーケンスを ->)。This can occur as a result of port scanning using a half-open SYN type scan (a SYN -> SYN-ACK -> RST sequence). アプリケーションを使用して、AcceptAsyncメソッドは、この条件を処理するために準備する必要があります。Applications using the AcceptAsync method should be prepared to handle this condition.

適用対象

こちらもご覧ください