Language agnostic connect()与TCP的行为

Language agnostic connect()与TCP的行为,language-agnostic,networking,tcp,network-protocols,Language Agnostic,Networking,Tcp,Network Protocols,我在客户端上调用connect()。客户端进入SYN_发送状态并发送SYN。现在它得到一个没有ACK的SYN,因此客户端进入SYN_RCVD状态 connect()是否在此点返回?从技术上讲,您有足够的信息可以在套接字上调用send()和recv()。RFC本身表示,如果您在SYN_RCVD状态的套接字上调用SEND,则: SYN-RECEIVED STATE Queue the data for transmission after entering ESTABLISHED state.

我在客户端上调用connect()。客户端进入SYN_发送状态并发送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()本身是否会被阻止,直到连接完全建立?

作为参考点,在中执行
connect()
将被阻止,直到连接完全建立(如果
connect()
呼叫设置为阻塞)。

在同时连接的情况下,客户端将只接收不带ACK的SYN。更常见的事件序列,使用普通的阻塞套接字:

  • 客户端应用程序调用
    connect()
    ,客户端发送
    SYN
    并进入状态
    SYN-SENT
  • 客户端从服务器接收
    SYN+ACK
    ;客户端发送
    ACK
    并进入状态
    已建立
    ;应用程序对
    connect()
    的调用返回

是的,我意识到这真的很少见,我只是想报道一些极端情况