【发布时间】:2015-03-12 16:00:44
【问题描述】:
我有客户端可以连接到我的服务器套接字,像这样在套接字中读写
$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) 和选项 SO_RCVTIMEO 以防止在 socket_read 中阻塞 $newc,但我没有成功非阻塞
我像下面这样测试socket_select,但这不起作用
$write = array();
$expect = NULL;
socket_select($clients, $write, $except, 0);
当第二个客户端连接到程序时 echo "do something..." 在第二个客户端输入任何内容之前不会工作 对于非阻塞 socket_read 我必须做什么?不可能还是我使用socket_select不正确?
【问题讨论】: