Steck
написал 5 августа 2004 года в 10:43 (1144 просмотра)
Ведет себя
как мужчина; открыл 125 тем в форуме, оставил 550 комментариев на сайте.
Народ подскажите как выставить таймаут на connect() ?
например если не закоонектится через 5 сек то выход?
куда копать? Спасибо
Язык программ C#
Последние комментарии
-
OlegL, 17 декабря 2023 года в 15:00 →
Перекличка
21
-
REDkiy, 8 июня 2023 года в 9:09 →
Как «замокать» файл для юниттеста в Python?
2
-
fhunter, 29 ноября 2022 года в 2:09 →
Проблема с NO_PUBKEY: как получить GPG-ключ и добавить его в базу apt?
6
-
Иванн, 9 апреля 2022 года в 8:31 →
Ассоциация РАСПО провела первое учредительное собрание
1
-
Kiri11.ADV1, 7 марта 2021 года в 12:01 →
Логи catalina.out в TomCat 9 в формате JSON
1
DevOps as a Service from Palark
24/7 SRE & DevOps service to cover all your Kubernetes needs.

Насколько я понял речь идет о 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 — то Стивенс — это то, без чего тебе не обойтись. Он стоит тех денег которые ты потратишь на его покупку.
Удачи!
А этот стивент на русском есть? ) Если да то не раздумывая преобрету..
СТИВЕНС! Ессно есть. У него две мегакниги:
http://www.piter.com/book/978531800535/
http://www.piter.com/book/978531800534/
Если кодишь под UNIX — просто обязан их иметь. По качеству и глубине изложения ему нету равных. Единственный минус — бестолковый алфавитный указатель (неподробный).
Спасиб уже выписываю)
Молодец! Удачи в изучении :)