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);
}
'' strace'を使って、どのようなシステムコールが行われているかを確認します。 –
ブロック解除モードで 'read()'を使用することもできます。これは、ソケットのオープン方法によって異なります。 –
read()が0を返す場合はどうですか?あなたはそれを処理することを確認してください。他端がデータを送信しない場合はどうなりますか?つまり、read()は決して戻ってこない場合が多く、唯一の方法は非ブロックI/Oを実行し、データの読み取りにタイムアウトを使用することです。 – nos