在网络套接字编程中,我知道 listen() 和 accept() 的作用。
但是,我想知道的是,在 tcp 中,3-way,三向握手发生在哪里。
listen() 是执行 3 次握手,还是 accept()?
我的意思是做 syn(client)//syn/ack(server)//ack(clinet) 数据包。
最佳答案
一旦应用程序调用了 listen()
,TCP 堆栈将为任何传入连接执行 3 次握手。这些连接在内核中排队,accept()
然后从队列中检索下一个连接并返回它。
listen
有一个 backlog
参数,它指定了这个队列应该有多大(尽管我认为一些实现忽略了这一点,并使用了堆栈中内置的限制).当队列已满时,堆栈将不再为传入连接执行握手;客户端应该重试,当队列有空间时,它们的连接就会成功。
这样做是为了让客户端在正常情况下(当积压队列有空间时)尽快收到SYN/ACK
,因此它不必重传SYN
.
关于c - 关于网络套接字编程中的listen()、accept()(3次握手),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34676972/