【发布时间】:2011-09-13 15:22:14
【问题描述】:
我遇到了调用 recv() 系统调用不会阻塞的问题。我目前有一个客户端-服务器结构设置,我遇到的问题是我向服务器发送一条消息,而服务器已设置为如下所示:
while (1) {
char buf[1024];
recv(fd, buf, sizeof(buf), flags);
processMsg(buf);
}
它正确接收了第一条消息,但 recv() 不会阻止并“接收”不想要的垃圾数据。我只想在消息发送时对消息做出反应。任何人都可以建议吗?
【问题讨论】:
-
您最好检查来自
recv的返回码。当您高兴地查看缓冲区中的一些垃圾时,它可能会尖叫错误... -
您还需要考虑接收部分消息或超过一条消息价值的字节的可能性。如果发件人传输 500 字节的消息,您的 RECV 调用可能只检索 200 个字节,或者它可能检索 700 个字节(如果您的发件人可以在不等待响应的情况下传输多条消息)。
-
应该在我之前的评论中包含指向this discussion of TCP Fragmentation 的链接。