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

4

1 に答える 1

0

サイズは明らかに間違っています:

setsockopt (fd, SOL_SOCKET, SO_RCVTIMEO, (char *)&timeout,
    sizeof(timeout) < 0);

をドロップし< 0ます。おそらく、いくつかのifからコピーして貼り付けてから、括弧を失敗させました。

于 2012-05-11T09:49:20.827 に答える