我已成功创建了一个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");
答案 0 :(得分:1)
使用MSG_WAITALL
参数中的flags
选项告诉它在收到len
个字节之前不要返回。
答案 1 :(得分:1)
为什么要将缓冲区增加到64KByte?我敢肯定,在大多数情况下,这没有多大意义。套接字缓冲区的最大大小肯定还取决于底层实现。也许你不能超过内部最大尺寸。
如果您想接收更大的数据/消息,则应多次使用socket_recv
函数调用。
顺便说一句,如果您使用的是PHP,那么您应该寻找一些强大的Framework。我认为尝试使用RAW套接字并不是一个好主意。