listen()
的linux手册页说:
使用Linux 2.2改变了TCP套接字上的backlog参数的行为。现在它特别 为完全建立的套接字等待接受的队列长度而烦恼 不完整连接请求的数量。队列的最大长度 可以使用/ proc / sys / net / ipv4 / tcp_max_syn_backlog设置不完整的套接字。当syncook- 启用时没有逻辑最大长度,此设置将被忽略。看到 tcp(7)了解更多信息。
在这种情况下,“完全建立的套接字”与“不完整的连接请求”的含义是什么?
答案 0 :(得分:1)
当主机A发起与主机B的连接时,TCP协议与所谓的三次握手建立连接:
不完整的连接请求是已发送SYN的连接,但主机尚未收到SYN-ACK(因为第一条或第二条消息或其重试已丢失)。
这与listen()
的参数的当前语义不同,"完全建立的套接字",它指定TCP协议已接受但未由应用程序处理的连接数(带有accept()
),可以在TCP忽略进一步的连接请求之前排队。
答案 1 :(得分:1)
处于低水平。
有一点是打开连接,即A侧或A点。 并且有一个监听点或服务器点,即B点。
A send to B a SYN packet
B response to A a SYN ACK packet
Then A response is a ACK packet.
现在已建立连接。
如果存在未执行的步骤,或者响应不是ACK,则表示未建立连接。
在建立连接之前,"连接"列在"待定连接"。
中如果响应不是ACK,则取消连接并从挂起连接列表中删除。显然有错误。
但是假设最后一个ACK没有发送,但还有另一个新连接。 此挂起的连接正在等待响应,并且新的连接将添加到列表中。 它会保留在列表中,直到响应到达或达到超时。
列表中的连接数是"未完成的连接请求"成功建立连接的数量是"完全建立的套接字"