我在客户机上调用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()自身阻塞,直到连接完全建立?

最佳答案

作为参考,TCP/IP Illustrated, Volume 2 by Wright and Stevens中的connect()的实现将阻塞,直到连接完全建立(如果将connect()调用设置为block)。

关于language-agnostic - connect()与TCP的行为,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/720185/

10-12 02:00