The OpenNET Project / Index page

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

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

"Как управлять временем connect ?" 
Сообщение от nixsys Искать по авторуВ закладки on 12-Авг-05, 12:45  (MSK)
Система клиент-сервер.

Сервер выключен, но клиент пытается до него достучаться.

Вопрос:

1. сколько времени тратит коннект на попытку соединения, если сервер выключен?

2. где находится параметр времени, в течении которого connect пытается установить связь с сервером?

Отошлите плиз к необходимому ману!

  Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

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

1. "Как управлять временем connect ?" 
Сообщение от butcher Искать по авторуВ закладки(ok) on 12-Авг-05, 12:51  (MSK)
>Отошлите плиз к необходимому ману!

man 2 select connect

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "Как управлять временем connect ?" 
Сообщение от nixsys Искать по авторуВ закладки on 12-Авг-05, 13:24  (MSK)
>>Отошлите плиз к необходимому ману!
>
>man 2 select connect

На Debian woody не ман пустой :(


  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "Как управлять временем connect ?" 
Сообщение от Brick Искать по авторуВ закладки(??) on 13-Авг-05, 18:45  (MSK)
Таймаут для connect где-то 75 секунд.

Изменить можно двумя путями:
1) Использовать неблокирующий сокет + select
2) Блокирующий сокет + alarm
.......
// Устанавливаем обработку сигнала SIGALARM
alarm(sec); // sec - таймаут для connect
connect(...);
alarm(0);
// Восстанавливаем обработку сигналов

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

4. "Как управлять временем connect ?" 
Сообщение от Alexander S. Salieff emailИскать по авторуВ закладки on 09-Сен-05, 18:55  (MSK)
>Система клиент-сервер.
>
>Сервер выключен, но клиент пытается до него достучаться.
>
>Вопрос:
>
>1. сколько времени тратит коннект на попытку соединения, если сервер выключен?
>
>2. где находится параметр времени, в течении которого connect пытается установить связь
>с сервером?
>
>Отошлите плиз к необходимому ману!

По красивому это ДОЛЖНО делаться через ioctl'ы, а еще точнее через setsockopt'ы, но, к сожалению, это не всегда и не на всех дистрах корректно работает. Классический метод с SIGALARM'ами мне не очень нравится, потому как чем меньше возни с сигналами, тем проще жить. Поэтому я использую связку неблокирующий сокет + poll :

//timeout в миллисекундах, -1 это бесконечное ожидание
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ообщить модератору | Наверх


Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ]
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




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

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