- 论坛徽章:
- 0
|
看unix网络编程,大概知道可以通过SIGALARM信号中断connect,实现超时控制,但实际测试时怎么没效果哇,代码如下:
#include "unp.h"
static void connect_alarm( int );
int connect_timeo( int sockfd, const SA* saptr, socklen_t salen, int nsec )
{
Sigfunc* sigfunc;
int n;
sigfunc = signal ( SIGALRM, connect_alarm );
if ( alarm(nsec) != 0 )
sock_msg("connnect_timeo: alarm was already set");
sock_msg("connecting....");
if (( n = connect( sockfd, saptr, salen))< 0 )
{
close ( sockfd );
if (errno == EINTR )
errno = ETIMEDOUT;
}
sock_msg("connecting finished!");
alarm ( 0 );
signal ( SIGALRM, sigfunc );
return ( n );
}
static void connect_alarm(int signo )
{
return;
}
int main(int argc, char** argv)
{
int sockfd = socket (AF_INET ,SOCK_STREAM,0);
const char*serverAddr = "192.168.0.101";
sockaddr_in servaddr;
servaddr.sin_port = htons ( 80 );
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = inet_addr ( serverAddr );
int ret = connect_timeo( sockfd, (SA*)&servaddr, sizeof (sockaddr_in ),5 );
if ( ret < 0 )
sock_err("connect error",0);
}
|
|