【发布时间】:2013-03-27 04:52:03
【问题描述】:
我编写这段代码是为了写入一个套接字(Server 结构包含一个socketfd 字段)
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,但如果@ 987654334@ 包括\0,那么bytesWritten 可能是6。但如果不是,它会是5,在这种情况下if (bytesWritten-len-1 == 0) 是错误的。哪个是正确的?
【问题讨论】:
-
Err... 你告诉
send你要发送多少字节! -
在你的发送大小中包含空终止符,如果 send() 返回你的发送大小你传递了它,那么 yes (就像它之前的字符一样,并且在此之前,等等......)。 (和 +1 克雷克 =P)
-
而
send发送各种字节,对0字节没有特殊处理。 -
您的代码还有很多其他问题需要解决。