ストリーミングストックティックデータを受信しているソケットがあります。ただし、切り捨てられたメッセージ、または切り捨てられたメッセージのように見えるものがたくさん表示されるようです。これが私がデータを受け取る方法です:
if((numbytes = recv(sockfd, buf, MAXDATASIZE-1, 0)) == -1) {
perror("recv()");
exit(1);
}
else {
buf[numbytes] = '\0';
// Process data
}
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の例に似たループが必要ですか(検証可能に機能します)?