3

次のような接続をリッスンするパッシブソケットがあります。

t = listen(fd, 1); 

fd前に作成されたソケットのファイル記述子です。
ご覧のとおり、私がよく理解しているように、listen() は保留中の接続のキューに着信ソケットを 1 つだけ配置できるはずです (バックログ引数 = 1 のため)。しかし、複数のソケットをパッシブ ソケットに接続しようとしても、エラーは発生しません。ECONNREFUSEDまた、キューがいっぱいであるため、エラーが発生することが予想されます。

なぜ行方不明なのですか?

4

1 に答える 1

3

に従ってman listen(2)、強調鉱山:

backlog 引数は、sockfd の保留中の接続のキューが大きくなる可能性のある最大長を定義します。キューがいっぱいのときに接続要求が到着すると、クライアントECONNREFUSED を示すエラーを受け取るか、基になるプロトコルが再送信をサポートしている場合は、接続の再試行が成功するように要求が無視される場合があります

TCP ソケットを使用している場合、TCP は再送信をサポートしているため、動作は予期されたものです。

于 2016-06-03T09:01:20.467 に答える