2016-05-21 11 views
0

私はTCPサーバアプリケーションをC++で書いています。Linuxで永遠にシステムコールを読む

私はソケットから一度に1行ずつ読み込もうとしていますが、read()システムコールは返されません。

string buffered_reader::read_line() { 
    string str; 
    int i = 0; 
    char ch; 

    do { 
     int len = conn.read_from_conn((void*)&ch, 1); 
     if (len == -1) 
      throw string("Error reading from connection!"); 

     str += ch; 
    } while (ch != '\n'); 

    return str; 
} 

そして、ここでread_from_conn()関数は、

int connectionplusplus::read_from_conn(void *buffer, int buffer_len) { 
    return read(this->connfd, buffer, buffer_len); 
} 
+1

'' strace'を使って、どのようなシステムコールが行われているかを確認します。 –

+0

ブロック解除モードで 'read()'を使用することもできます。これは、ソケットのオープン方法によって異なります。 –

+0

read()が0を返す場合はどうですか?あなたはそれを処理することを確認してください。他端がデータを送信しない場合はどうなりますか?つまり、read()は決して戻ってこない場合が多く、唯一の方法は非ブロックI/Oを実行し、データの読み取りにタイムアウトを使用することです。 – nos

答えて

0

ある問題がconnfdが初期化されなかったことです。