如何使用读写(套接字)设置超时?并测试它们?
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秒后关闭连接。我该怎么做?
答案 0 :(得分:0)
尺寸显然是错误的:
setsockopt (fd, SOL_SOCKET, SO_RCVTIMEO, (char *)&timeout, sizeof(timeout) < 0);
放弃< 0
。你可能会复制粘贴一些,如果然后拙劣的括号。