处理器套接字定时器读/写

时间:2012-05-11 09:44:34

标签: c++ sockets timeout

如何使用读写(套接字)设置超时?并测试它们?

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秒后关闭连接。我该怎么做?

1 个答案:

答案 0 :(得分:0)

尺寸显然是错误的:

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

放弃< 0。你可能会复制粘贴一些,如果然后拙劣的括号。