nixp.ru v3.0

29 мая 2017,
понедельник,
18:17:11 MSK

DevOps с компанией «Флант»
Аватар пользователя Steck
Steck написал 5 августа 2004 года в 10:43 (531 просмотр) Ведет себя как мужчина; открыл 124 темы в форуме, оставил 549 комментариев на сайте.

Народ подскажите как выставить таймаут на connect() ?

например если не закоонектится через 5 сек то выход?

куда копать? Спасибо

Язык программ C#

Longobard

Насколько я понял речь идет о UNIX, поэтому курим стивенса. Есть несколько вариантов, в данном случае самый простой — это таймер. Т.е. ставим сигнал sigalarm на 5 секунд, обработчике ставимreturn — и таким образом через 5 секунд connect прервется, а далее просто обрабатываем его возвращенное значение. Итак см. Стивенс страница 393. Вот сырец который там приведен:

#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 */

Надеюсь разберешься, т.к. выкладывать сюда хидер unp.h влом. Можешь скачать все сырцы к книге с www.piter.com/download . Этот сырец лежит в архиве в lib/connect_timeo.c . И вапще если взялся за сетевой кодинг в UNIX — то Стивенс — это то, без чего тебе не обойтись. Он стоит тех денег которые ты потратишь на его покупку.

Удачи!

Steck

А этот стивент на русском есть? ) Если да то не раздумывая преобрету..

Longobard

СТИВЕНС! Ессно есть. У него две мегакниги:

http://www.piter.com/book/978531800535/

http://www.piter.com/book/978531800534/

Если кодишь под UNIX — просто обязан их иметь. По качеству и глубине изложения ему нету равных. Единственный минус — бестолковый алфавитный указатель (неподробный).

Steck

Спасиб уже выписываю)

Longobard
Steck
Спасиб уже выписываю)

Молодец! Удачи в изучении :)