所以我一直在编写这个工具,我正在使用这些Sockets(而不是these)与它们的区别我推测第二个使用严格的基于流的套接字。问题是你不能在我正在使用的套接字上使用socket_get_status。
除了socket_get_status之外还有其他方法可以获得可用字节数吗?
答案 0 :(得分:1)
从fsockopen()
返回的流是常规套接字的托管包装器;未读的字节(这可能是你可能会遇到的)是套接字上的read()
(由包装器本身创建)与包装器上的fread()
之间的差异(由您的脚本生成) )。
包装器读取8192字节的块,但fread()
或fgets()
可能无法一次读取所有数据,这就是unread
元数据字段的原因你可以查询;这是否有用是另一回事; - )
使用常规套接字时,您可以:
socket_select()
等待数据可用,然后使用适当大的socket_read()
socket_set_nonblock()
使套接字解除阻止并尝试从中读取