我正在创建一个服务器应用程序,但我有一个问题,但我似乎无法在线找到答案。
我希望我的服务器能够同时为多个客户端提供服务。在我的代码中,我为每个为客户端提供服务的连接创建一个子进程,因此服务器仅负责接受连接和创建子进程。
在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/