【发布时间】:2012-12-26 19:11:48
【问题描述】:
是否存在超时跨平台解决方案以使用accept 函数接受客户端而不将套接字设置为非阻塞?
我知道我应该使用select 函数,但我做错了什么?
SOCKET NativesAcceptClient(SOCKET s, int timeout)
{
int iResult;
struct timeval tv;
fd_set rfds;
FD_ZERO(&rfds);
FD_SET(s, &rfds);
tv.tv_sec = (long)timeout;
tv.tv_usec = 0;
iResult = select(s, &rfds, (fd_set *) 0, (fd_set *) 0, &tv);
if(iResult > 0)
{
return accept(s, NULL, NULL);
}
else
{
//always here, even if i connect from another application
}
return 0;
}
如何解决这个问题? 谢谢!
【问题讨论】:
-
@ryanbwork 否,超时为 10
-
是立即弹出选择还是等待 10 秒后弹出(如果您没有连接到它)?它看起来不错(除了提到的非 Windows 平台的 s+1),还有其他问题……
-
@Boris,你解决过这个问题吗?如果是这样,您可以选择一个答案或自己写一个答案吗?