The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Socket таймаут"
Вариант для распечатки Архивированная нить - только для чтения! 
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Socket таймаут"
Сообщение от Brick Искать по авторуВ закладки(??) on 05-Июл-04, 13:37  (MSK)
Приветсвую всех...
Тут такая проблемма: надо уменьшить таймаут при коннекте, смотрел setsockopt, там вроде как ничего такого нет, может кто чё-нить посоветует???
  Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "Socket таймаут"
Сообщение от klalafuda emailИскать по авторуВ закладки on 05-Июл-04, 15:03  (MSK)
>Приветсвую всех...
>Тут такая проблемма: надо уменьшить таймаут при коннекте, смотрел setsockopt, там вроде
>как ничего такого нет, может кто чё-нить посоветует???

man alarm
man sigaction

// wbr

  Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "Socket таймаут"
Сообщение от SergeiZz Искать по авторуВ закладки on 05-Июл-04, 17:01  (MSK)
>Приветсвую всех...
>Тут такая проблемма: надо уменьшить таймаут при коннекте, смотрел setsockopt, там вроде
>как ничего такого нет, может кто чё-нить посоветует???
Подробнее.
Что такое "таймаут при коннекте".


  Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "Socket таймаут"
Сообщение от Brick Искать по авторуВ закладки(??) on 08-Июл-04, 23:50  (MSK)
>>Приветсвую всех...
>>Тут такая проблемма: надо уменьшить таймаут при коннекте, смотрел setsockopt, там вроде
>>как ничего такого нет, может кто чё-нить посоветует???
>Подробнее.
>Что такое "таймаут при коннекте".
это когда клиентская часть пытается законнектиться к серверной, а серверная в это время недоступна, вот и таймаут - это время которое клиент ещё будет пытаться законнектиться, и надо его изменить; )


  Рекомендовать в FAQ | Cообщить модератору | Наверх

4. "Socket таймаут"
Сообщение от Alexander S. Salieff emailИскать по авторуВ закладки on 09-Июл-04, 17:33  (MSK)
>Приветсвую всех...
>Тут такая проблемма: надо уменьшить таймаут при коннекте, смотрел setsockopt, там вроде
>как ничего такого нет, может кто чё-нить посоветует???

Ни алармами ни сигэкшенами (как советовали выше) играть не советую. В линухе механизм сигналов ваще штука опасная и лучше его не трогать - вонять не будет ;)
Лана, ближе к делу, все просто, нужно разблочить сокет послать его коннектится и poll-демультиплексором ждать коннекта в течении желаемого таймаута. Тока там есть некоторые тонкости в выковыриванием кода возврата. Выглядеть будет приблизительно так:

//timeout in seconds * 10-3 (millisec)
//timeout=-1 системный таймаут (около 2х минут)

int t_connect(int sockfd, const struct sockaddr *serv_addr, socklen_t addrlen, int timeout)
{
//Переведем сокет в неблокирующий режим
int cur_flg=-1;
if ((cur_flg=fcntl(sockfd, F_GETFL))==-1)
  return -1;
if (fcntl(sockfd, F_SETFL, cur_flg | O_NONBLOCK)==-1)
  return -1;
//Попытка соединения
if (connect(sockfd, serv_addr, addrlen)==-1)
  {
  if (errno!=EINPROGRESS)
   {
   fcntl(sockfd, F_SETFL, cur_flg);
   return -1;
   }
  }
//Крутим poll в течении timeout
struct pollfd ufds={sockfd, POLLOUT, 0};
int poll_ret = poll(&ufds, 1, timeout);
if (poll_ret<=0)
  {
  fcntl(sockfd, F_SETFL, cur_flg);
  return -1;
  }
if (!(ufds.revents&POLLOUT))
  {
  fcntl(sockfd, F_SETFL, cur_flg);
  return -1;
  }
//Вытаскиваем из сокета код возврата
int gso_ret = 0;
socklen_t gso_ret_len = (socklen_t)sizeof(gso_ret);

if (getsockopt(sockfd, SOL_SOCKET, SO_ERROR, &gso_ret, &gso_ret_len)==-1)
  {
  fcntl(sockfd, F_SETFL, cur_flg);
  return -1;
  }
if (gso_ret!=0)
  {
  errno=gso_ret;
  fcntl(sockfd, F_SETFL, cur_flg);
  return -1;
  }
//Вернем сокет в блокирующий режим
if (fcntl(sockfd, F_SETFL, cur_flg)==-1)
  return -1;
return 0;
}

Причем вся инфа, о том, как это сделать, имеется в мане про коннект

  Рекомендовать в FAQ | Cообщить модератору | Наверх

5. "Socket таймаут"
Сообщение от Brick Искать по авторуВ закладки(??) on 11-Июл-04, 13:25  (MSK)
Спсибо всем ;)
  Рекомендовать в FAQ | Cообщить модератору | Наверх


Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру