TCP一般默认的connect超时时间为75s,相对较长,可以自定义超时时间,使得超时时间短于75s
typedef sighandler_t Sigfunc
static void connect_alarm(int);
int connect_timeout(int sockfd, const struct sockaddr *addr,socklen_t addrlen,int sec)
{
Sigfunc *func;
int n ;
func = signal(SIGALRM,connect_alarm);
static void connect_alarm(int);
int connect_timeout(int sockfd, const struct sockaddr *addr,socklen_t addrlen,int sec)
{
Sigfunc *func;
int n ;
func = signal(SIGALRM,connect_alarm);
if(alarm(sec) != 0)
{
printf("the alarm alreadly exsited");
}
if((n = connect(sockfd,addr,addrlen)) < 0)
{
close(sockfd);
printf("connect failed");
if(errno == EINTR)
errno = ETIMEDOUT;
}
alarm(0); //cancel alarm
func = signal(SIGALRM,func);
return n;
}
{
printf("the alarm alreadly exsited");
}
if((n = connect(sockfd,addr,addrlen)) < 0)
{
close(sockfd);
printf("connect failed");
if(errno == EINTR)
errno = ETIMEDOUT;
}
alarm(0); //cancel alarm
func = signal(SIGALRM,func);
return n;
}
static void connect_alarm(int signo)
{
return ; //just interrupt connect()
}
{
return ; //just interrupt connect()
}