为什么在socket_listen()中使用backlog

时间:2016-11-05 08:10:04

标签: php sockets

socket_listen()

我看到了socket_listen()的手册。我仍然不明白

bool socket_listen ( resource $socket [, int $backlog = 0 ] )
  

1.这种情况下的积压是什么?

     

2.为什么使用socket_listen()以及它的用途是什么?

     

3. backlogssocket_listen()

中删除了什么?      
    
        
  1. 为什么要使用0,1,2,3等积压值?
  2.        

请解释上述问题。

由于

1 个答案:

答案 0 :(得分:3)

documentation

中涵盖<div class='container'>"; echo "<div class='row'; echo "<div class='span8'; echo page_slider(); echo"</div><div class='span8'> <img src='http://jesuspeople.personalityweb.com/wpcontent/uploads/2016 /10/partner-with-us-1.jpg' /> <img src='http://jesuspeople.personalityweb.com/wp-content/ uploads/2016/10/prophetic-corner-1.jpg' /> <img src='http://jesuspeople.personalityweb.com/wp- content/uploads/2016/10/miracle-testimonies-1.jpg' /></div>"; echo"</div></div>"; 的方式有什么问题?
  

最多积压传入连接将排队等待处理。如果连接请求到达并且队列已满,则客户端可能会收到带有$backlog指示的错误,或者,如果基础协议支持重新传输,则可以忽略该请求,以便重试可能成功。

     

注意:   传递给backlog参数的最大数量很大程度上取决于底层平台。在Linux上,它被静默地截断为ECONNREFUSED。在win32上,如果传递SOMAXCONN,则负责套接字的底层服务提供者会将backlog设置为最大合理值。没有标准规定可以找出此平台上的实际积压值。

或者您可以引用BSD Sockets listen documentation,因为PHP使用BSD套接字:

  

一个整数,表示可以在任何时间排队的挂起连接数。操作系统通常会对此值设置上限。

BSD套接字历史上使用单个队列实现,其大小由backlog参数确定。

当从客户端收到SOMAXCONN数据包时,它会发回SYN数据包并将连接添加到队列中。收到相应的SYN/ACK后,连接会将其状态更改为ACK,并有资格切换到应用程序。

当达到最大积压时,系统将不再发回ESTABLISHED个数据包以响应SYN/ACK个数据包。通常,TCP实现只会丢弃SYN数据包(而不是使用SYN数据包进行响应),以便客户端重试。因此,&#34; 可能会收到错误,并显示RST&#34;

如果您在实现中不使用ECONNREFUSED参数,则只会自动设置。在Linux上它的 128 ,从listen man page开始:

  

如果backlog参数大于backlog中的值,则会以静默方式将其截断为该值;此文件中的默认值为128.在2.4.25之前的内核中,此限制为硬编码值/proc/sys/net/core/somaxconn,值为128。