send() - Überprüfung ob auch alles weggeschickt
-
es wurde hier einst erörtert, daß send immer alles sendet und ich wurde davon überzeugt, auch gleich die dokumentation diesbezüglich schwammig ist. ergo ist deine funktion überflüssig.
-
send() blockiert solange bis alles "irgendwohin" zum Versenden übergeben werden kommte.
Der Returnwert von send() ist also immer "alles" oder "Fehler".Wenn send() erfolgreich mit "alles" zurückkommt heisst das aber lange noch nicht dass die Daten auch schon versendet, geschweige denn empfangen wurden. Es heisst nur dass irgendein System wie z.B. der TCP/IP Stack die Daten "übernommen" hat, und sie bald mal übertragen werden.
Wenn bis dahin die Verbindung zusammenbricht oder der Peer verschwindet, dann ... wird doch nix versendet. Oder nur ein Teil. Oder ...
-
devkid schrieb:
Nein, denn
lenSend != lenStringergibt immer falsch.
Du müsst für den Rückgabewert von send ()eine zusätzliche Variable anlegen.lenSend und lenString sind zwei unterschiedliche Variable, wie unterschiedlich müssen die den sein?
-
while( m_bytes_to_send > 0 ) { int bytes_sent = send( m_bsocket, m_lpszRequestPos, m_bytes_to_send, 0 ); if( bytes_sent == SOCKET_ERROR ) { m_iWSA_ErrorCode = WSAGetLastError(); return( BS_ERROR ); } else { m_bytes_to_send -= bytes_sent; m_lpszRequestPos += bytes_sent; } }
-
@EOP: die Schleife ist schön, aber zwecklos, denn sie wird niemals mehr als 1x durchlaufen werden

-
asdca schrieb:
es wurde hier einst erörtert, daß send immer alles sendet und ich wurde davon überzeugt, auch gleich die dokumentation diesbezüglich schwammig ist. ergo ist deine funktion überflüssig.
Das gilt aber nur dann, wenn der Socket im blocking-mode betrieben wird.
-
ach ne, is nich wahr? echt jetzt

-
asdca schrieb:
ach ne, is nich wahr? echt jetzt

Ja ... das wissen die wenigsten ... aber Du hast ja schon darauf hingewiesen, daß auch Deine Erkenntnis diesbezüglich noch nicht so alt ist.
-
hustbaer schrieb:
@EOP: die Schleife ist schön
Das ist schön.
hustbaer schrieb:
, aber zwecklos, denn sie wird niemals mehr als 1x durchlaufen werden

Das weniger.

-
EOP schrieb:
hustbaer schrieb:
@EOP: die Schleife ist schön
Das ist schön.
hustbaer schrieb:
, aber zwecklos, denn sie wird niemals mehr als 1x durchlaufen werden

Das weniger.

?
Wie schon geschrieben wurde: send schickt immer alles weg. Ausser im non-blocking mode (siehe unten).----
Was über blocking/non-blocking gesagt wurde: natürlich gilt das nur für blocking, aber bei non-blocking sollte man sowieso mit select() arbeiten, und muss auf EWOULDBLOCK reagieren. Non-blocking ist also einfach ein ganz anderes Spiel, kann man nicht mit blocking vergleichen.
-
Bitte überprüfe nochmal deinen Beitrag. Du hast einmal blocking geschrieben wo du non-blocking meintest.
-
*guggstdu schrieb:
lenSend und lenString sind zwei unterschiedliche Variable, wie unterschiedlich müssen die den sein?
Oh, tut mir leid, hab ich ich wohl verlesen.

-
Ah also wenn send immer alles sendet ist das gut.
Dann kann ich die Funktion ja löschen.
Danke für die Antworten.
-
;_= schrieb:
Bitte überprüfe nochmal deinen Beitrag. Du hast einmal blocking geschrieben wo du non-blocking meintest.
Du hast Recht
Hab's korrigiert