0
どのように読み取りと書き込み(ソケット)でタイムアウトを設定しますか?それをテストしますか?ハンドラソケットタイマーを読み書きする場合
struct timeval timeout;
timeout.tv_sec = 3;
timeout.tv_usec = 0;
setsockopt (fd, SOL_SOCKET, SO_RCVTIMEO, (char *)&timeout,
sizeof(timeout));
setsockopt (fd, SOL_SOCKET, SO_SNDTIMEO, (char *)&timeout,
sizeof(timeout));
string temp;
while (1) {
char buf [20];
ssize_t e = read(fd, buf, 20);
// convert current buf into string
// add current string to temp
// check if end of temp == \r\n\r\n
// if yes break
}
だから私は、Telnetを使用している場合はこれをテストするために、リードがブロックされているため、「こんにちは」、コンソール「ハング」と入力します。しかし、3秒を過ぎるとタイムアウトは何もしません。 3秒間吊り下げた後、読み取りを行って接続を終了します。これはどうすればいいですか?
'read()'は接続を閉じることができません。読み込みにエラーまたは '0'が返されたかどうかを確認してから、' close(fd) 'を使って接続を閉じなければなりません。 – dwalter