Hows是否为listen()工作排队大小?

时间:2014-11-15 18:29:23

标签: c sockets

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

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

listen()中,我们将套接字的文件描述符和队列大小设置为参数。现在假设队列意味着有多少人在等待队列中“免费”点的数量增加了多少?子进程何时开始为客户端提供服务,或者“服务”已完成且客户端是否与服务器断开连接?

1 个答案:

答案 0 :(得分:4)

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

在应用程序成功accept()连接的那一刻,将对此积压队列进行排队传入连接。


注意:

积压连接是当您正在复制套接字,分支新进程并accept(2)它们时,恰好进入系统的传入连接。通常,系统为此队列分配默认值5,几乎所有时间都足以用于正常目的。您的进程通常accept(2)在新连接的未绑定服务器套接字中,然后准备分叉并传递绑定套接字的副本,然后再次转到accept(2)。同时,一个新的连接可以收入,并且系统排队等待该进程返回accept(2)呼叫。使用队列,例如10,系统将在开始丢弃它们之前排队那些传入连接(在这种情况下连接被拒绝错误消息)