backlog设置了1,子进程数为1,但是还能同时有5个tcp连接

zhuxiaoyu

[attach]1357[/attach]
 
同时开5个窗口,进行tcp连接,还是都可以连上
 
 
那么这个backlog参数,到底该如何使用......
 
 

3229 2 0
2个回答

walkor 打赏

backlog可以看作是一个队列,里面保存了暂时未被任何进程accept的连接,不影响实际的在线数。

  • zhuxiaoyu 2018-11-07

    多谢大佬指教 多谢大佬指教!!!!!!!!!!!!

  • zhuxiaoyu 2018-11-07

    大佬 这个要怎么模拟,我给main资源设置了backlog为1,每次有新请求连接进来都fork一个进程,模拟不出来.....

  • walkor 2018-11-07

    不调用accept

  • zhuxiaoyu 2018-11-07

    $a = ["socket"=>["backlog"=>1]];
    $context = stream_context_create($a);
    $main_socket = stream_socket_server("tcp://0.0.0.0:8888", $error_code, $error_msg,STREAM_SERVER_BIND | STREAM_SERVER_LISTEN,$context);
    while(1){ sleep(1);}

    以上代码 还是能同时有两个tcp连接(telnet 127.0.0.1 8888)

    ss -tpl 这个8888端口确实是1

  • phpcreeper 2018-11-07

    是1就错了,就应该是 backlog + 1

phpcreeper

我补充下:
1、linux2.6内核之后,backlog指的是某段时间内完全建立连接【即established】监听队列的最大socket队列长度。
2、监听队列的最大长度并不是backlog,而是 backlog+1 。

  • zhuxiaoyu 2018-11-07

    我连5个也没事啊

  • phpcreeper 2018-11-07

    不可能的,你再把我列的那两条概念看一下,你说的5个并不是全连接,你按照walkor说的,不要accept,然后netstat 观察连接状态就能知道是怎么回事了。

年代过于久远,无法发表回答
×
🔝