PHP从Socket获取可用字节

时间:2012-06-22 02:44:26

标签: php sockets

所以我一直在编写这个工具,我正在使用这些Sockets(而不是these)与它们的区别我推测第二个使用严格的基于流的套接字。问题是你不能在我正在使用的套接字上使用socket_get_status

除了socket_get_status之外还有其他方法可以获得可用字节数吗?

1 个答案:

答案 0 :(得分:1)

fsockopen()返回的流是常规套接字的托管包装器;未读的字节(这可能是你可能会遇到的)是套接字上的read()(由包装器本身创建)与包装器上的fread()之间的差异(由您的脚本生成) )。

包装器读取8192字节的块,但fread()fgets()可能无法一次读取所有数据,这就是unread元数据字段的原因你可以查询;这是否有用是另一回事; - )

使用常规套接字时,您可以:

  • 使用socket_select()等待数据可用,然后使用适当大的socket_read()
  • 使用socket_set_nonblock()使套接字解除阻止并尝试从中读取