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
(又名h
,e
,l
,l
,o
,\0
),然後strlen(message)
將是5,但如果send
包括\0
,然後bytesWritten
很可能是6.但是,如果不是將是5,在這種情況下if (bytesWritten-len-1 == 0)
是錯誤的。哪個是對的?
Err ... *你*告訴'發送'你想發送多少字節! – 2013-04-04 22:11:10
在您的發送大小中包含空終止符,並且如果send()返回您傳遞的大小,那麼* yes *(就像之前的char一樣,在此之前等等)。 (和+1 Kerrek = P) – WhozCraig 2013-04-04 22:11:53
而'send'發送各種字節,它並不專門處理0字節。 – 2013-04-04 22:12:17