【发布时间】:2016-04-27 15:08:45
【问题描述】:
我找到了一些关于如何操作的提示,但我不明白如何使用 setsockopt。我有一个无限的while循环调用recv,如果客户端在5秒内没有发送任何东西,我想超时和close(cli_socket)。
如果客户只发送整个预期消息的一部分,我想重置计时器并再给他 5 秒。
当前我有这个:
while((cut = buffer.find("\r\n")) == -1)
{
struct timeval tv;
tv.tv_sec = 5;
setsockopt(cli_socket, SOL_SOCKET, SO_RCVTIMEO,(struct timeval *)&tv,sizeof(struct timeval));
recv(cli_socket, tmpBuffer, 100, 0);
buffer += tmpBuffer;
memset(tmpBuffer, 0, 100);
}
【问题讨论】:
-
你的
setsockopt电话对我来说似乎没问题,它对我有用。您看到了什么行为,它与您的预期有何不同?我确实注意到您没有检查来自recv()的返回值,这确实让我想知道如果超时会发生什么。 -
如果连接超时,我想关闭连接