任何人都可以解释这个关于socket_select()的神秘警告吗?

时间:2018-01-22 13:55:10

标签: php sockets

我对PHP文档中有关使用socket_select()

的说明有疑问
  

来自http://www.php.net/socket_select

     

如果您不打算在socket_select()调用之后检查其结果,则必须向任何集合添加套接字资源,并进行适当的响应。 socket_select()返回后,必须检查所有数组中的所有套接字资源。必须写入任何可用于写入的套接字资源,并且必须读取可用于读取的任何套接字资源。

我想知道这在实践中意味着什么,特别是与阅读有关。

  • 如果您没有为其中一个退回的套接字调用socket_recv(),会发生什么?插座是否会关闭?致命错误?数据丢失?
  • 拨打socket_recv()后,如果套接字缓冲区中仍有数据,该怎么办?在缓冲区为空之前,您是否需要进一步调用?或者相反 - 在你再次呼叫socket_recv()之前,是否应该避免致电socket_select()?或者这两种方式无关紧要?

评论有点神秘 - 它会发出一个警告,说明某些事情是糟糕的,但并不清楚如何避免它或将产生什么影响!

1 个答案:

答案 0 :(得分:0)

我认为这意味着输入数组中提供的套接字会锁定,直到您清除缓冲区,导致稍后与套接字的进一步交互导致问题。最好的方法是循环遍历每个数组,并在该循环中,在每个套接字上再次循环,直到套接字不再从其缓冲区返回任何内容,例如在您提供的文档页面上进一步显示