在socket_read上设置超时

Jam*_*tig 15 php sockets timeout

我想知道如何在socket_read通话中设置超时?它第一次调用时socket_read,它等待直到发送数据,如果在5秒内没有发送数据,我想关闭连接.任何帮助?我已经尝试SO_RCVTIMEO过没有运气了.

我正在创建一个套接字socket_create()并用它来监听连接,然后在连接时我会监听数据,然后用它做一些事情.超时命中时,我想运行socket_shutdown()然后socket_close().

Nic*_*ick 24

这设置了套接字的5秒超时.

socket_set_option($socket,SOL_SOCKET, SO_RCVTIMEO, array("sec"=>5, "usec"=>0));
Run Code Online (Sandbox Code Playgroud)

  • 有趣的观察:如果您使用PHP_NORMAL_READ而不是PHP_BINARY_READ(默认值)作为socket_read()的第三个参数,它将忽略使用socket_set_option()设置的超时,并将无限期地阻塞,直到发送内容...(使用PHP 5.5.9观察) ) (10认同)

OIS*_*OIS 11

您是否尝试过socket_set_optionSO_RCVTIMEO

输入操作的超时值.


Jam*_*tig 5

我做了一个socket_listen,然后我用 time()+2 和一个带有非块集和socket_read() 的 while 循环进行了手动超时。似乎工作正常。还有其他选择吗?

更新:我发现将套接字设置为非阻塞,然后使用 socket_listen 提供了我需要的超时。