1

クライアントで connect() を呼び出します。クライアントは SYN_SENT 状態に入り、SYN を送信します。ここで、ACK を含まない SYN を取得するため、クライアントは SYN_RCVD 状態に入ります。

この時点で connect() は戻りますか? 技術的には、ソケットで send() および recv() を呼び出すのに十分な情報があります。RFC 自体は、SYN_RCVD 状態のソケットで SEND を呼び出すと、次のように述べています。

SYN-RECEIVED STATE

  Queue the data for transmission after entering ESTABLISHED state.

そして、RECEIVE を呼び出すと、次のようになります。

LISTEN STATE
SYN-SENT STATE
SYN-RECEIVED STATE

  Queue for processing after entering ESTABLISHED state.  If there
  is no room to queue this request, respond with "error:
  insufficient resources".

したがって、私の質問は次のとおりです: SYN を取得した後に connect() が返され、recv() の呼び出しがブロックされるか、接続が完全に確立されるまで connect() 自体がブロックされますか?

4

2 に答える 2

3

参考までに、Wright と Stevens による TCP/IP Illustrated, Volume 2の実装はconnect()、接続が完全に確立されるまでブロックします (呼び出しがブロックに設定されている場合)。connect()

于 2009-04-06T07:27:31.597 に答える