【问题标题】:What value of backlog should I use?我应该使用什么积压值?
【发布时间】:2012-04-17 16:10:35
【问题描述】:

我读了man 2 listen

我不明白什么是积压值,它说

backlog 参数定义了 sockfd 的挂起连接队列可以增长到的最大长度

对,我该如何定义什么是最佳价值?

谢谢

【问题讨论】:

标签: c sockets listen backlog


【解决方案1】:

基本上,listen() 积压影响的是,如果您的应用程序不是 accept()ing 连接,则有多少传入连接可以排队。对于大多数应用程序来说,这并不是特别重要。大多数系统使用的最大值是 128,通过它通常是安全的。

【讨论】:

  • 好吧,如果我listen(sockfd, 5),我应该在我的accept()(在我的无限循环中)测试current_nb_client < 5,以便向我的客户发送错误消息,或者我可以信任积压和在客户端处理这个?
  • 不,这不是必需的——只要您在连接进入时立即接受连接,您的收听积压的长度是无关紧要的。您可以根据需要拥有任意数量的活动连接;侦听积压仅影响尚未完全建立的连接。
  • 哦,我刚刚明白了!我认为他们不会从队列中消失。但不是!这是一个待处理的队列,我只需要accept() 每个人,它们就会从队列中消失。
【解决方案2】:

这是试图连接的客户端之间的斗争。将接受请求推送到队列中,并且接受线程将它们吸走。通常,线程获胜。我通常设置为 32,但它通常不是一个重要的参数。

【讨论】:

  • 好吧,如果我listen(sockfd, 5),我应该在我的accept()(在我的无限循环中)测试current_nb_client < 5,以便向我的客户发送错误消息,还是我可以信任积压和在客户端处理这个?
  • 如果队列已满,连接尝试将被拒绝,但这种情况不太可能发生,您应该忘记它。必须有一些队列来覆盖那些刚刚发生大量连接请求突然出现的时间,但总的来说,今天的处理器/内存/操作系统/任何东西都可以轻松跟上繁忙的网络。
猜你喜欢
  • 1970-01-01
  • 2012-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-22
  • 1970-01-01
  • 2017-07-12
相关资源
最近更新 更多