読み取りと書き込み(ソケット)でタイムアウトをどのように設定しますか?そしてそれらをテストしますか?
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を使用してこれをテストし、「hello」と入力すると、読み取りがブロックされているため、コンソールが「ハング」します。ただし、3秒を超えてハングした場合、タイムアウトは何もしません。3秒間ハングした後、読み取りで接続を閉じたい。どうすればよいですか?