我只是对这个问题感到好奇,任何人都可以告诉我吗?
答案 0 :(得分:10)
TCP是服务器和客户端之间的流协议。该协议是可靠的,并且对于每个服务器<>客户端流需要单独的状态。通过listen / accept启动的连接协议设置此服务器<>客户端连接状态。 UDP是一种无连接,不可靠的数据报(消息)协议,因此无需监听新连接 - 数据报可以从任何来源以任何顺序进入。
答案 1 :(得分:4)
这是因为UDP不是像TCP那样面向连接,所以在listen / accept中没有意义,就像SOCK_STREAM一样。尝试阅读Beej guide to network programming中的“2.1。两种类型的互联网套接字”段落,整个指南一般都很有趣。
答案 2 :(得分:0)
如果我没记错,没有任何与Udp相关的Listen()方法,而是在使用TCP时调用receive(),它与Listen()相同,两者都会阻塞进程直到收到包。希望这能回答你的问题。
答案 3 :(得分:0)
考虑到内核源码,listen()
主要用于初始化accept queue
和syn queue
,使用UDP时无用。
调用链是listen -> inet_listen -> inet_csk_listen_start -> reqsk_queue_alloc