【发布时间】:2016-12-18 06:31:18
【问题描述】:
我有一个套接字服务器每 500 毫秒接收一次 XML 文件,有时将多个文件连接为一个文件时会出错。
do
{
char* buf = (char*)MALLOCZ(IP_BUF_SZ);
chrs_read = recv(sockfd, buf, IP_BUF_SZ, 0);
if (chrs_read > 0)
sBuffer.append(buf, chrs_read);
FREE(buf);
buf = NULL;
}
while (chrs_read > 0);
所以,有时chrs_read 不会返回我-1 以停止接收并保存文件以开始新的接收。
我是否忘记了套接字中的某些配置-默认情况下它是异步且非阻塞的-我应该继续使用这种方式吗?
提前谢谢你
【问题讨论】:
-
不清除问题。你是说recv块吗?如果是这样,您可以在 NOWAIT 标志上设置标志并检查结果。如果对方关闭套接字,recv 也可以返回 0,你是否覆盖了这种情况?顺便说一句,将 malloc 和 free 移到你的 do/while 之外。
-
您是否在同一个 TCP 流中发送多个文件? (坏主意,除非您在流中插入自己的“文件结尾”标记。)
标签: c++ sockets visual-c++ visual-studio-2008 winsock2