Warning: socket_recv(): unable to read from socket [11]: Resource temporarily unavailable in [file] on line 94
0
0
html5 websockets、dev.w3.org / html5 / websockets /、およびphpソケット関数php.net/manual/en/ref.sockets.phpを使用しています。 私の問題は、websocketを使用してクライアントからサーバーに送信されるメッセージが最大1449バイトに切り捨てられることです。 net.ipv4.tcp_timestampsを0に設定すると、余分なバイトが2つ受信されます。 socket_recvを使用しています。 socket_recvをループしようとしましたが、socket_recvを最初に呼び出した後、次の警告が表示されます。
Warning: socket_recv(): unable to read from socket [11]: Resource temporarily unavailable in [file] on line 94
注意:
socket_recv()をMSG_DONTWAITで使用すると、上記の警告が表示されます。 e.g. socket_recv($ socket、$ data、10024、MSG_DONTWAIT)
0だけを使用すると、システムはブロックします。 e.g. socket_recv($ socket、$ data、 10024、0)
では、なぜ送信されたメッセージは切り捨てられますか?
私のsysctl.conf:
net.ipv4.ip_forward = 0 net.ipv4.conf.default.rp_filter = 1 net.ipv4.conf.default.accept_source_route = 0 kernel.sysrq = 0 kernel.core_uses_pid = 1 kernel.msgmnb = 65536 kernel.msgmax = 65536 kernel.shmmax = 4294967295 kernel.shmall = 268435456 net.ipv4.tcp_syncookies = 1 net.core.somaxconn = 900 net.ipv4.tcp_fin_timeout = 20 net.core.netdev_max_backlog = 2500 net.core.rmem_default = 262144 net.core.wmem_default = 262144 net.core.rmem_max = 16777216 net.core.wmem_max = 16777216 net.ipv4.udp_rmem_min = 16384 net.ipv4.udp_wmem_min = 16384 net.ipv4.tcp_rmem = 8192 87380 16777216 net.ipv4.tcp_wmem = 8192 65536 16777216 net.ipv4.tcp_mem = 8388608 12582912 16777216 net.ipv4.udp_mem = 8388608 12582912 16777216 net.ipv4.tcp_timestamps = 1 net.ipv4.tcp_sack = 1 net.ipv4.tcp_window_scaling = 1
1 Answer
1
さて、特定のソケットの各 `socket_recv()`の後に `socket_select()`を再度呼び出さなければならなかったことがわかりました。