c - Listen() 的队列大小如何工作?

标签 c sockets

我正在创建一个服务器应用程序,但我有一个问题,但我似乎无法在线找到答案。

我希望我的服务器能够同时为多个客户端提供服务。在我的代码中,我为每个为客户端提供服务的连接创建一个子进程,因此服务器仅负责接受连接和创建子进程。

listen()中,我们将套接字的文件描述符和队列大小设置为参数。现在,考虑到队列意味着当队列中的“空闲”位置数量增加时有多少人在等待?当子进程开始为客户端提供服务时,或者当“服务”完成并且客户端与服务器断开连接时?

最佳答案

backlog参数listen()设置操作系统为应用程序排队的传入连接的最大数量。

在应用程序成功时,排队的传入连接将从该积压队列中获取 accept()是一个连接。


注意:

积压连接是当您复制套接字、 fork 新进程和 accept(2) 时碰巧进入系统的传入连接。荷兰国际集团他们。通常系统会为此队列分配默认值 5,几乎所有时间都足以满足正常用途。您的进程正常accept(2) s 在未绑定(bind)的服务器套接字中建立新连接,然后准备 fork 并向子进程传递绑定(bind)套接字的副本,然后再再次访问 accept(2) 。与此同时,一个新的连接可以收入,并由系统排队等待进程返回accept(2)称呼。假设队列有 10 个,系统将在开始丢弃传入连接之前对其进行排队(在这种情况下会出现连接被拒绝的错误消息)

关于c - Listen() 的队列大小如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26949225/

相关文章:

linux - 查询 linux 中套接字上的发送缓冲区使用情况

PHP 将 ssh2_shell() 与 socket_select() 结合使用

java - HttpClient 使用成功执行的方法卡在 socketRead0 上

c - 引用 block 作用域外但函数作用域内的变量 (C/C++)

c - 如何比较具有常量值的结构成员?

objective-c - iPhone 泛洪内存泄漏

python - 如何从python中的字符串创建图像

javascript - 在 Node.js 套接字中写入和 'data' 事件

c - 将 float/double 转换为字符串的高效函数

c - 为什么 valgrind 将我的内存报告为 "definitely lost"?