【发布时间】:2011-10-28 21:20:36
【问题描述】:
由于我似乎无法找到原始问题的解决方案,因此我尝试了一些解决方法。我只是想为我的 TCP 套接字的connect() 调用设置超时。
- 我希望
connect()被阻止,但直到通常的 75 秒超时,我想定义自己的。 - 我已经尝试过
select(),它可以解决超时问题,但我无法建立连接(这是我最初遇到的问题,如here 所述)。
所以现在我找到了另一种处理它的方法:只需进行阻塞 connect() 调用,但用这样的警报中断它:
signal(SIGALRM, connect_alarm);
int secs = 5;
alarm(secs);
if (connect(m_Socket, (struct sockaddr *)&addr, sizeof(addr)) < 0 )
{
if ( errno == EINTR )
{
debug_printf("Timeout");
m_connectionStatus = STATUS_CLOSED;
return ERR_TIMEOUT;
}
else
{
debug_printf("Other Err");
m_connectionStatus = STATUS_CLOSED;
return ERR_NET_SOCKET;
}
}
与
static void connect_alarm(int signo)
{
debug_printf("SignalHandler");
return;
}
这是我在 Internet 上在 stackoverflow 上的一个线程 here 中找到的解决方案。如果我使用此代码,程序将启动计时器,然后进入connect() 调用。 5 秒后,信号处理程序被触发(如控制台上的 printf() 所示),但此后程序仍保留在 connect() 函数中 75 秒。实际上,每个描述都说connect_alarm() 应该中断connect() 函数,但在我的情况下似乎没有。有什么方法可以为我的问题获得所需的结果?
【问题讨论】:
-
我在一周后解决了我的问题.....thnx...
-
你是用 sigaction 实现的吗?
标签: c++ sockets connect signals alarm