我一直在阅读本教程以了解套接字编程.似乎listen()
和accept()
系统调用都做同样的事情,即阻塞并等待客户端连接到使用socket()
系统调用创建的套接字.为什么你需要两个单独的步骤呢?为什么不只使用一个系统调用?
顺便说一句,我搜索了这个问题,发现了类似的问题,但没有一个答案令人满意.例如,其中一个人说accept()
创建套接字是没有意义的,因为我知道套接字是由创建的socket()
.
这是历史建筑的一部分.listen
为下次accept
通话准备套接字.Listen还允许人们设置积压 - 系统将接受的连接数,而不是让你的程序真正接受它们.积压完成之后的所有内容都会被系统立即拒绝.listen
永远不会阻塞,同时accept
阻塞(除非套接字处于非阻塞模式),直到下一个连接出现.显然,这不一定是两个独立的功能 - 可以想象accept()
功能可以做到一切listen
.
该listen()
函数基本上在内部套接字结构中设置一个标志,将套接字标记为被动侦听套接字,您可以调用该套接字accept
.它打开绑定端口,以便套接字可以开始接收来自客户端的连接.
该accept()
函数要求侦听套接字接受下一个传入连接并返回该连接的套接字描述符.因此,从某种意义上说, accept()
确实创建了一个套接字,而不是listen()
用于传入连接的套接字.