3

サーバーへの有効なソケット接続がすでに確立されています。サーバーが送信を停止するまでデータを受信し続けるように設計された単純なループがあります。すべてのドキュメントは、recv() を何度も試行すると、(状況に応じて) 0 または -1 が返されることを示しています。代わりに、ある種の IOError (recv 呼び出しのある行) でスレッドを強制終了しています。私は何が欠けていますか?

編集: sad単なる文字列ストリームです。問題とは何の関係もないことを約束します:D

別の編集: errno.herrno コードを含めてチェックしましたが、役に立ちませんでした。

do {            
    memset(buffer,0,sizeof(buffer));
    bytes = recv(s,buffer,sizeof(buffer)-40,0);
    sad << buffer;
    Sleep(1);
} while (bytes>0);
4

1 に答える 1

1

errno通信チャネルが途中で終了する可能性があるため、も確認する必要があります。

#include <errno.h>
#include <string.h>

do {            
    memset(buffer,0,sizeof(buffer));
    bytes = recv(s,buffer,sizeof(buffer)-40,0);
    if (errno)
       break;
    sad << buffer;
    Sleep(1);
} while (bytes>0);

if (errno)
   std::cerr << "Premature end of connection: " << strerror(errno) << '\n';
于 2012-10-10T23:54:02.353 に答える