关于网络套接字编程中的listen(),accept()(3路握手)

A.C*_*Cho 5 c sockets networking

在网络套接字编程中,我知道listen()和accept()做什么.

但是,我想知道的是,在tcp中,3-way,三向握手在哪里发生.

listen()执行3向握手,还是接受()?

我的意思是做syn(客户端)// syn/ack(服务器)// ack(clinet)数据包.

Bar*_*mar 12

应用程序调用后listen(),TCP堆栈将对任何传入连接执行3次握手.这些连接在内核中排队,accept()然后从队列中检索下一个连接并返回它.

有一个backlog参数listen,它指定了这个队列应该有多大(尽管我认为一些实现会忽略它,并使用堆栈中内置的限制).当队列已满时,堆栈将不再执行传入连接的握手; 客户端应该重试,当队列有空间时,它们的连接将成功.

它以这种方式完成,以便客户端SYN/ACK在正常情况下(当积压队列有空间时)尽快收到,因此它不必重新传输SYN.

  • @Zephyr 我确信我是对的。编写一个调用“listen()”但从不调用“accept()”的服务器,然后在客户端连接到端口时进行数据包捕获。我没有看到该网站上哪里说“accept()”发送“SYN/ACK”。 (2认同)