我在客户端调用 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".
所以我的问题是:connect() 在获得 SYN 后是否返回,然后对 recv() 的调用会阻塞,还是 connect() 本身会阻塞,直到连接完全建立?