Zitat:
Zitat von Remon Das mit non block hatte ich auch schon. Das Problem dabei ist das der schreibbuffer nicht schnell genug ist und geschriebende Bytes nicht sendet. |
Dann hast du es vlt. falsch implementiert. Hast du die Hinweise zu socket_write() beachtet?
Zitat:
|
socket_write() does not necessarily write all bytes from the given buffer. It's valid that, depending on the network buffers etc., only a certain amount of data, even one byte, is written though your buffer is greater. You have to watch out so you don't unintentionally forget to transmit the rest of your data.
|
Du kannst jedenfalls nicht den gleichen Code verwenden, wie bei sequentiellem Versenden. Non-Blocking heisst, alle Funktionen kehren *sofort* wieder zurück und geben Hinweise darauf, was passieren könnte, wenn die Voraussetzungen nicht erfüllt sind (accept() ohne Clientanfrage liefert z.B. WSAWOULDBLOCK, ein Hinweis darauf, das bei einem blocking-socket dieser blockieren würde um auf einen Client zu warten...)
Das heisst, man muss anders an die Sache rangehen und immer vorher
prüfen (peek) was passieren würde. Beim Senden musst du immer noch abfragen, ob auch alle Daten gesendet wurden, die du bereitgestellt hast und eventuell "nachliefern"... asynchrone Operationen verlangen asynchrones Handeln, du musst dann selber machen, was dir im blocking modus der Netzwerktreiber abnimmt (Pufferung von Daten, Häppchenweises Senden o. Empfangen).