- 论坛徽章:
- 0
|
书中的这个函数是用来控制connect超时的,我在AIX上试了可以,在指定的超时时间后alarm将会起作用,但是linux(redhat)上却不行,不知哪位高手能指点一二
- /* include connect_timeo */
- #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)
- err_msg("connect_timeo: alarm was already set");
- if ( (n = connect(sockfd, (struct sockaddr *) saptr, salen)) < 0) {
- close(sockfd);
- if (errno == EINTR)
- errno = ETIMEDOUT;
- }
- alarm(0); /* turn off the alarm */
- Signal(SIGALRM, sigfunc); /* restore previous signal handler */
- return(n);
- }
- static void
- connect_alarm(int signo)
- {
- return; /* just interrupt the connect() */
- }
- /* end connect_timeo */
- void
- Connect_timeo(int fd, const SA *sa, socklen_t salen, int sec)
- {
- if (connect_timeo(fd, sa, salen, sec) < 0)
- err_sys("connect_timeo error");
- }
复制代码 |
|