我有服务器套接字,客户端可以连接到我,读写套接字,就像这样
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_bind($socket, $address, $port))
socket_listen($socket);
socket_set_nonblock($socket);
我在socket_accept中将socket_set_nonblock设置为非阻塞我的套接字,这很好用,但是对于连接到我的服务器的客户端,我不能非阻塞客户端
while(true){
if (($newc = @socket_accept($socket)) !== false) {
//socket_set_nonblock($newc);
//socket_set_option($socket,SOL_SOCKET, SO_RCVTIMEO, array("sec"=>5, "usec"=>0));
$clients[] = $newc;
$data = socket_read($newc, 1024, PHP_NORMAL_READ);
}
echo "do sometings ...";
}
我测试了socket_set_nonblock( $newc )和option SO_RCVTIMEO以防止阻塞socket_read中的$newc,但我不能成功地解除阻塞
我测试了socket_select,如下所示,但这不起作用
$write = array();
$expect = NULL;
socket_select($clients, $write, $except, 0);
当第二个客户端连接到程序echo“做一些事情...”不工作,直到第二个客户端输入任何非阻塞socket_read我必须做什么?这是不可能的,还是我使用的socket_select不正确?
https://stackoverflow.com/questions/27943458
复制相似问题