我认为使用socket_set_nonblock()可能存在一些问题。没有socket_set_nonblock(),socket_select()可以工作,但是使用socket_set_nonblock(),socket_select()会失败。我写了如下代码。
案例1.失败
$sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
echo socket_strerror(socket_last_error()); /* 'success' */
socket_set_nonblock($sock);
echo socket_strerror(socket_last_error()); /* 'success' */
socket_connect($sock, ADDRESS, PORT);
echo socket_strerror(socket_last_error()); /* 'unable to connect [115]: Operation now in progress' */
$read = array($sock); $write = array($sock);
socket_select($read, $write, $e=NULL, TIMEOUT);
echo socket_strerror(socket_last_error()); /* 'unable to connect [115]: Operation now in progress' */
案例2.成功
$sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
echo socket_strerror(socket_last_error()); /* 'success' */
socket_connect($sock, ADDRESS, PORT);
echo socket_strerror(socket_last_error()); /* 'success' */
$read = array($sock); $write = array($sock);
socket_select($read, $write, $e=NULL, TIMEOUT);
echo socket_strerror(socket_last_error()); /* 'success' */
“回声”之后的评论是“回声”的输出。我无法猜出问题是什么。此外,它发生在我运行的唯一一台服务器上。其他人工作正常。服务器的环境完全相同。 (相同的os / apache / php版本和模块)。