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


Unable to increase Socket buffer size using socket_recv

我已经成功创建了一个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");

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

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

顺便说一句,如果你正在使用PHP,你应该寻找一些强大的框架。我认为尝试使用RAW套接字不是一个好主意。