c - 套接字编程 - listen() 和 accept() 有什么区别?

标签 c sockets tcp network-programming

我一直在阅读 this tutorial了解套接字编程。似乎 listen()accept() 系统调用都做同样的事情,即阻塞并等待客户端连接到使用创建的套接字socket() 系统调用。为什么为此需要两个单独的步骤?为什么不只使用一个系统调用?

顺便说一句,我搜索了这个问题并找到了类似的问题,但没有一个答案令人满意。例如,其中一个说 accept() 创建套接字,这是没有意义的,因为我知道套接字是由 socket() 创建的。

最佳答案

listen() 函数基本上在内部套接字结构中设置一个标志,将套接字标记为被动监听套接字,您可以在该套接字上调用accept。它打开绑定(bind)端口,以便套接字可以开始接收来自客户端的连接。

accept() 函数要求监听套接字接受下一个传入连接并返回该连接的套接字描述符。因此,从某种意义上说,accept() 确实 创建了一个套接字,而不是您用来listen() 以获取传入连接的套接字。

关于c - 套接字编程 - listen() 和 accept() 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34073871/

相关文章:

c - 为什么我的双向链表的 C 实现会创建重复值?

c - 对已安装 APR C 库的 undefined reference

java - 为java程序制作本地远程的最简单方法是什么?

node.js - 将流从 getUserMedia 发送到 nodejs 后端并将其重新发送到 google-cloud-platform 语音 API

c - 在程序执行期间停止 Linux 控制台回显输入

c - c中的双重列表,打印时出现问题

linux - 辅助数据 : ‘IP_RECVIF’ undeclared (first use in this function)

c# - 使用 StreamSocket 正确接收数据挂起

tcp - WIFI问题以及如何激活TCP Westwood

JAVA(发送音频流 一服务器四客户端同机)