我正在試驗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',您將看到正在發生的讀/寫/發送/接收系統調用。您還會看到,您被阻止的位置(以及可能原因)。 –