send () Funktion in C Wie geht es, wenn nicht alle Bytes gesendet werden?

7

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,

    
Ahmed 06.01.2013, 16:32
quelle

3 Antworten

10

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:

%Vor%

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.

    
zwol 06.01.2013, 16:36
quelle
6

Sie könnten etwas wie:

versuchen %Vor%     
iabdalkader 06.01.2013 16:36
quelle
3

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.

    
cnicutar 06.01.2013 16:34
quelle

Tags und Links