send()
-
Kann man davon ausgehen das bei send() immer alles oder nichts gesendet wird?
Oder muss man wie bei recv() in einer Schleife senden bis alles gesendet ist?Danke & Gruss Mike
-
Send schickt alles auf einmal ab.
-
Ethon schrieb:
Send schickt alles auf einmal ab.
Ja, ja, das hat man mir auch schon mal geantwortet. Glauben kann ich es immer noch nicht.
Wie sende ich dann z.B. eine 5GB-Datei mit POST?
Besser eine loop verwenden imho.
-
EOP schrieb:
Ethon schrieb:
Send schickt alles auf einmal ab.
Ja, ja, das hat man mir auch schon mal geantwortet. Glauben kann ich es immer noch nicht.
Wie sende ich dann z.B. eine 5GB-Datei mit POST?
Besser eine loop verwenden imho.
Wie sollst du es auch senden? Wird doch eh in packets aufgesplittet, das passiert aber auf Protokollebene und geht dich als High-Level Programmierer nichts an.
send() schickt einfach Pakete ab bis alles weg ist und gut.
Bei recv hat man das Problem, das man wissen muss wie viele Daten vom Buffer zu einer Message gehören.
-
Ethon schrieb:
Send schickt alles auf einmal ab.
Dass hab ich auch schon gehört. Aber laut msdn:
Return value
If no error occurs, send returns the total number of bytes sent, which can be less than the number requested to be sent in the len parameter. Otherwise, a value of SOCKET_ERROR is returned, and a specific error code can be retrieved by calling WSAGetLastError.
Jetzt bin ich verwirrt.
-
kann nur im non-blocking modus passieren, standard ist blocking
-
Scheinbar weiss das keiner so genau...
-
Man kann es hieraus schließen:
"On nonblocking stream oriented sockets, the number of bytes written can be between 1 and the requested length, depending on buffer availability on both the client and server computers."
-
Belli schrieb:
Man kann es hieraus schließen:
"On nonblocking stream oriented sockets, the number of bytes written can be between 1 and the requested length, depending on buffer availability on both the client and server computers."Und was heisst das?
-
Ich müsste es für blocking Sockets wissen.
-
Vergleich doch den Rückgabewert mit len.
Wenn ein Unterschied besteht machst du eine Fehlerbehandlung.