php:奇怪的socket_set_nonblock()和socket_connect()

时间:2015-09-16 12:56:26

标签: php

我认为使用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版本和模块)。

0 个答案:

没有答案