我有一个正在接收流股票报价数据的套接字。但是,我似乎收到了很多被截断的消息,或者看起来像是被截断的消息。这是我接收数据的方式:
if((numbytes = recv(sockfd, buf, MAXDATASIZE-1, 0)) == -1) {
perror("recv()");
exit(1);
}
else {
buf[numbytes] = '\0';
// Process data
}
Can recv()
只收到所发送内容的部分消息?
我的感觉是我可能需要另一个循环recv()
接收直到发送完整消息的调用。我知道我拥有的 libcurl 实现(我认为不可能在这里使用 libcurl)有一个外循环:
// Read the response (sum total bytes read in tot_bytes)
for(tot_bytes=0; ; tot_bytes += iolen)
{
wait_on_socket(sockfd, 1, 60000L);
res = curl_easy_recv(curl, buf + tot_bytes, sizeof_buf - tot_bytes, &iolen);
if(CURLE_OK != res) {
// printf( "## %d", res );
break;
}
}
我需要一个recv()
类似于 libcurl 示例的循环(可验证有效)?
我们还可以将标志传递给recv
等待所有消息到达。当您知道要接收的字节数时它就会起作用。您可以像这样传递命令。
numbytes = recv(sockfd, buf, MAXDATASIZE-1, MSG_WAITALL);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)