Ich muss Daten an den Socket senden, grundsätzlich eine Datei übertragen,
Laut send () - Funktionsdokumenten heißt es:
%Vor%Die Zeile, um die ich mir Sorgen mache, ist, dass der Rückgabewert unter dem angeforderten Wert liegt. Da ich aus einer Datei lese und in einen Socket schreibe, weil es möglicherweise nicht alle Bytes sendet, würde ich es wahrscheinlich wiederholen müssen, wenn der volle Puffer nicht gesendet wurde? In diesem Fall würde ich wahrscheinlich den Zeiger auf den gleichen Puffer durch Bytes lesen und senden Sie es wieder ??
Ich will nur wissen, ob das so ist? Oder gibt es einen sehr cleveren Weg dazu, dass alle angeforderten Daten gesendet werden, ohne dass ich mich darum kümmern muss, wenn nicht alle Daten gesendet wurden?
Danke,
Ja, Sie müssen den Pufferzeiger weiterleiten und den send
-Aufruf wiederholen, bis entweder der gesamte Puffer verbraucht ist oder Sie einen schwerwiegenden Fehler erhalten. Das Standard-Idiom sieht ungefähr so aus:
Beachten Sie, dass Sie, wenn Sie Datagramme senden, deren Grenzen wichtig sind (z. B. UDP), diese Technik nicht verwenden können ; Sie müssen einen kurzen Sendevorgang als Fehler behandeln.
Ja, Sie müssen sich um den Wert kümmern, der von send
(oder write
usw.) zurückgegeben wird. Es gibt keinen extrem cleveren Weg, aber es gibt ein paar Funktionen, die von dem ausgezeichneten Richard Stevens geschrieben wurden, nämlich readn
und writen
.
Dieser Artikel auf Informit scheint eine Version dieser Funktionen zu haben.