The OpenNET Project / Index page

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

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

"Помогите с сокетами"  
Сообщение от LXD email(ok) on 26-Сен-08, 17:54 
Собственно проблема такая:
Написал прогу которая на висит Х поре. Как только к ней подключаются она запускает экземпляр демона читает сообщение и рвёт соединение. всё вроде хорошо, вот только периодически возникает такая проблема - клиент подключился, кинул сообщение и остаётся висеть "на линии".
#netstat показывает что на этом порту висит клиент.
если даже killall этого демона, всё равно висит.
через какой-нибудь (всегда по разному) промежуток времени клиент отваливается.
Рву соединение так:
shutdown(fd, 2);
close(fd);
после чего:  
exit(0);

Экземпляр демона убивается, зомбиков нет.

Ни кто не сталкивался с подобной ситуацией?

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

 Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Помогите с сокетами"  
Сообщение от MakMen email on 26-Сен-08, 20:08 
Все сталкиваются. Это нормально. Проблема то в чем?
Этот параметр настраивается в атрибутах сокета, не помню правда где. посмотри man tcp

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

2. "Помогите с сокетами"  
Сообщение от MakMen email on 26-Сен-08, 20:12 
это сделано для защиты от атак, по умолчанию у меня стоит 60 сек. параметр tcp_fin_timeout

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

3. "Помогите с сокетами"  
Сообщение от LXD (??) on 27-Сен-08, 16:17 
>это сделано для защиты от атак, по умолчанию у меня стоит 60
>сек. параметр tcp_fin_timeout

Спасибо огромное за разъяснения)

Может ещё подскажете, если соект открылся клиентом и клиент ничего туда не шлёт, как его закрыть, скажем, секунд через 10? Таймер писать?

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

4. "Помогите с сокетами"  
Сообщение от angra (ok) on 27-Сен-08, 16:23 
Лучше select с timeout.
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

5. "Помогите с сокетами"  
Сообщение от LXD email(ok) on 28-Сен-08, 19:04 
>Лучше select с timeout.

Можно подробнее?

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

6. "Помогите с сокетами"  
Сообщение от angra (ok) on 29-Сен-08, 19:19 
man 2 select, там есть даже пример. На всякий случай, если у вас в мане его нет,то привожу здесь:

ПРИМЕР
       #include <stdio.h>
       #include <sys/time.h>
       #include <sys/types.h>
       #include <unistd.h>

       int
       main(void)
       {
           fd_set rfds;
           struct timeval tv;
           int retval;

           /* Ждем, пока на стандартном вводе (fd 0) что-нибудь
              появится. */
           FD_ZERO(&rfds);
           FD_SET(0, &rfds);
           /* Ждем не больше пяти секунд. */
           tv.tv_sec = 5;
           tv.tv_usec = 0;

           retval = select(1, &rfds, NULL, NULL, &tv);
           /* Не полагаемся на значение tv! */

           if (retval)
               printf("Данные доступны.\n");
               /* Теперь FD_ISSET(0, &rfds) вернет истинное значение. */
           else
               printf("Данные не появились в течение пяти секунд.\n");

           exit(0);
       }

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

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

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




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

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