[attach]1357[/attach] 同时开5个窗口,进行tcp连接,还是都可以连上 那么这个backlog参数,到底该如何使用......
backlog可以看作是一个队列,里面保存了暂时未被任何进程accept的连接,不影响实际的在线数。
多谢大佬指教 多谢大佬指教!!!!!!!!!!!!
大佬 这个要怎么模拟,我给main资源设置了backlog为1,每次有新请求连接进来都fork一个进程,模拟不出来.....
不调用accept
$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
是1就错了,就应该是 backlog + 1
我补充下: 1、linux2.6内核之后,backlog指的是某段时间内完全建立连接【即established】监听队列的最大socket队列长度。 2、监听队列的最大长度并不是backlog,而是 backlog+1 。
我连5个也没事啊
不可能的,你再把我列的那两条概念看一下,你说的5个并不是全连接,你按照walkor说的,不要accept,然后netstat 观察连接状态就能知道是怎么回事了。
backlog可以看作是一个队列,里面保存了暂时未被任何进程accept的连接,不影响实际的在线数。
多谢大佬指教 多谢大佬指教!!!!!!!!!!!!
大佬 这个要怎么模拟,我给main资源设置了backlog为1,每次有新请求连接进来都fork一个进程,模拟不出来.....
不调用accept
$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
是1就错了,就应该是 backlog + 1
我补充下:
1、linux2.6内核之后,backlog指的是某段时间内完全建立连接【即established】监听队列的最大socket队列长度。
2、监听队列的最大长度并不是backlog,而是 backlog+1 。
我连5个也没事啊
不可能的,你再把我列的那两条概念看一下,你说的5个并不是全连接,你按照walkor说的,不要accept,然后netstat 观察连接状态就能知道是怎么回事了。