сообщение tcp неполное

Я использую веб-сокеты html5, dev.w3.org/html5/websockets/ и функции сокетов php, php.net/manual/en/ref.sockets.php. Моя проблема в том, что сообщения, отправленные клиентом с использованием веб-сокетов на сервер, усекаются до 1449 байт. Когда я устанавливаю для net.ipv4.tcp_timestamps значение 0, получается пара дополнительных байтов. Я использую 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, я получаю указанное выше предупреждение. например socket_recv($socket, $data, 10024, MSG_DONTWAIT)
  • Если я просто использую 0, система блокируется. например socket_recv ($ сокет, $ данные, 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

person adam    schedule 25.10.2010    source источник


Ответы (1)


Что ж, оказывается, мне приходилось снова вызывать socket_select() после каждого socket_recv() для данного сокета.

person adam    schedule 26.10.2010