2013-04-04 25 views
0

我寫了這個代碼寫入到一個插座(該Server結構包含一個socketfd場)在C中send()返回的數字是否包含空終止符?

void writeToSocket(Server *server, const char *message) { 
    size_t len = strlen(message); 
    int bytesWritten = 0; 
    while (true) { 
     bytesWritten += send(server->socketfd, message + bytesWritten, len, 0); 
     if (bytesWritten-len-1 == 0) 
      break; 
    } 
} 

此代碼可能有幾個問題 - 我在此對於新手。隨時提出你可能會看到的任何紅旗。我主要關心的是循環可能不會終止。

例如:該消息是hello(又名hello\0),然後strlen(message)將是5,但如果send包括\0,然後bytesWritten很可能是6.但是,如果不是將是5,在這種情況下if (bytesWritten-len-1 == 0)是錯誤的。哪個是對的?

+4

Err ... *你*告訴'發送'你想發送多少字節! – 2013-04-04 22:11:10

+0

在您的發送大小中包含空終止符,並且如果send()返回您傳遞的大小,那麼* yes *(就像之前的char一樣,在此之前等等)。 (和+1 Kerrek = P) – WhozCraig 2013-04-04 22:11:53

+0

而'send'發送各種字節,它並不專門處理0字節。 – 2013-04-04 22:12:17

回答

3

send(3)發送給定數量的字節;它可以不關心你發送的是一個字符串,一個整數數組還是一個隨機的struct。如果你不包括結尾'\0',它不包括在內。

相關問題