我正在试验C++下的tcp套接字连接。我想通过网络发送一个std :: map对象的序列化(JSON)形式。我发现在发送了一定数量的数据包之后(这取决于数据包的大小),发送已经不可能了。我曾经尝试都卷曲lib和套接字连接标准的POSIX API:在c + +套接字连接发送的奇怪行为
- 发送的POSIX API:它开始阻塞后〜100包已被送往
- 卷曲:curl_easy_send似乎执行,但服务器不接收新的数据包
在通信同一个套接字连接是used.I猜测整个事情是关系到缓冲区大小,但(1)我增加了它,并没有看到任何显著效果(2)如果缓冲区当前已满,我希望在给定的时间后可以再次发送。也许我在这种情况下错过了一些重要但愚蠢的选项或信息。所以我的问题是:是服务器的配置错误还是我没有以正确的方式使用API?
接收侧:
ListenerThread::ListenerThread() {
curl = curl_easy_init();
if (curl != 0) {
curl_easy_setopt(curl, CURLOPT_URL, "...");
curl_easy_setopt(curl, CURLOPT_CONNECT_ONLY, 1L);
res = curl_easy_perform(curl);
res = curl_easy_getinfo(curl, CURLINFO_LASTSOCKET, &sockfd);
if (res != 0) {
printf("Error: %s\n", curl_easy_strerror(res));
}
}
}
...
void ListenerThread::run() {
while (true) {
char buf[2048];
wait_on_socket(sockfd, 1, 60000L);
res = curl_easy_recv(curl, buf, 2048, &iolen);
if (CURLE_OK != res) {
break;
}
nread = (curl_off_t) iolen;
printf("Received %" CURL_FORMAT_CURL_OFF_T " bytes.\n", nread);
printf("Buffer: %s\n", buf);
}
}
它被接收了吗? –
直到发送工作正常,接收到所有数据包。 –
尝试在服务器和客户端程序上使用'strace',您将看到正在发生的读/写/发送/接收系统调用。您还会看到,您被阻止的位置(以及可能原因)。 –