2010-10-25 13 views
0

J'utilise les websockets html5, dev.w3.org/html5/websockets/, et les fonctions socket php, php.net/manual/fr/ref.sockets.php. Mon problème est que les messages envoyés à partir du client en utilisant websockets au serveur sont tronqués à un maximum de 1449 octets. Lorsque j'ai défini net.ipv4.tcp_timestamps sur 0, deux octets supplémentaires sont reçus. J'utilise socket_recv. J'ai essayé de boucler sur socket_recv, mais après le premier appel à socket_recv, l'avertissement suivant EMITS:tcp message incomplet

Warning: socket_recv(): unable to read from socket [11]: Resource temporarily unavailable in [file] on line 94 

Note:

  • Lorsque j'utilise socket_recv() avec MSG_DONTWAIT, je reçois l'avertissement ci-dessus . par exemple. socket_recv ($ socket, $ data, 10024, MSG_DONTWAIT)
  • Si j'utilise simplement 0, le système se bloque. par exemple. socket_recv ($ socket, $ data, 10024, 0)

Alors, pourquoi les messages envoyés sont-ils tronqués?

mon 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 

Répondre

1

Eh bien, il se trouve que je devais appeler socket_select() à nouveau après chaque socket_recv() pour une prise donnée.