无法使用socket_recv增加套接字缓冲区大小

时间:2012-09-06 08:17:15

标签: php websocket

我已成功创建了一个Web套接字连接,并且能够正确地发送和接收数据。但是,我无法增加套接字接收缓冲区大小。

通过使用下面的代码,我可以将接收字节限制为1000到更少。

$bytes = socket_recv($socket,$buffer,2048,0);

但是,当我尝试将其长度增加到65536字节时,它不会增加。 我使用下面提到的凭据来创建Web套接字连接。

set_time_limit ( 0 ) ;
ob_implicit_flush ( ) ;
$master=socket_create(AF_INET, SOCK_STREAM, SOL_TCP) or die("socket_create() failed");
socket_set_option($master, SOL_SOCKET, SO_REUSEADDR, 1) or die("socket_option() failed");
socket_bind($master, $address, $port) or die("socket_bind() failed");
socket_listen($master,20) or die("socket_listen() failed");

2 个答案:

答案 0 :(得分:1)

使用MSG_WAITALL参数中的flags选项告诉它在收到len个字节之前不要返回。

答案 1 :(得分:1)

为什么要将缓冲区增加到64KByte?我敢肯定,在大多数情况下,这没有多大意义。套接字缓冲区的最大大小肯定还取决于底层实现。也许你不能超过内部最大尺寸。 如果您想接收更大的数据/消息,则应多次使用socket_recv函数调用。

顺便说一句,如果您使用的是PHP,那么您应该寻找一些强大的Framework。我认为尝试使用RAW套接字并不是一个好主意。