我在客户机上调用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/