我一直在阅读 this tutorial了解套接字编程。似乎 listen()
和 accept()
系统调用都做同样的事情,即阻塞并等待客户端连接到使用创建的套接字socket()
系统调用。为什么为此需要两个单独的步骤?为什么不只使用一个系统调用?
顺便说一句,我搜索了这个问题并找到了类似的问题,但没有一个答案令人满意。例如,其中一个说 accept()
创建套接字,这是没有意义的,因为我知道套接字是由 socket()
创建的。
最佳答案
listen()
函数基本上在内部套接字结构中设置一个标志,将套接字标记为被动监听套接字,您可以在该套接字上调用accept
。它打开绑定(bind)端口,以便套接字可以开始接收来自客户端的连接。
accept()
函数要求监听套接字接受下一个传入连接并返回该连接的套接字描述符。因此,从某种意义上说,accept()
确实 创建了一个套接字,而不是您用来listen()
以获取传入连接的套接字。
关于c - 套接字编程 - listen() 和 accept() 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34073871/