Страниц: [1]
  Печать  
Автор Тема: Красиво убить сервер  (Прочитано 6489 раз)
bob
Участник
*
Offline Offline

Сообщений: 0


Просмотр профиля WWW
« : Октября 21, 2004, 05:28:19 pm »

Добрый день!
Имеется однопоточный сервер. Ждет accept. Но хочется его убить и запустить заново. Kill, конечно работает, но некоторое время после этого порт занят, bind говорит: Addres already in use. Через несколько секунд - все нормально. Может ли убиваемый сервер что-то сделать, или чем определяется это время?
Записан
lestat
QOR.Moderator
*****
Offline Offline

Сообщений: 985


I don't trust anything


Просмотр профиля WWW
« Ответ #1 : Октября 21, 2004, 05:38:55 pm »

bob
Может ли убиваемый сервер что-то сделать

Послать SIGTERM, обработать его сервером и все закрыть.
Записан

olej
QOR.Team
****
Offline Offline

Сообщений: 42



Просмотр профиля
« Ответ #2 : Октября 21, 2004, 06:47:05 pm »

Но хочется его убить и запустить заново. Kill, конечно работает, но некоторое время после этого порт занят, bind говорит: Addres already in use. Через несколько секунд - все нормально. Может ли убиваемый сервер что-то сделать, или чем определяется это время?

Это состояние timewait сокета.
См. Й.Снайдера, например (есть ссылка в разделе <Источники информации> ... как же задрали эти смайлики на кавычки - чего тут смешного?!).

Это состояние можно отменить setsockopt, но начнутся другие проблемы, которые вам разгребать... (см. там же).
Записан
Roman St.Zhavnis
Участник
*
Offline Offline

Сообщений: 45



Просмотр профиля WWW
« Ответ #3 : Октября 23, 2004, 04:33:24 pm »

некоторое время после этого порт занят, bind говорит: Addres already in use.
В сервере после вызова socket с помощью setsockopt установить SO_REUSEADDR
Записан
bob
Участник
*
Offline Offline

Сообщений: 0


Просмотр профиля WWW
« Ответ #4 : Октября 28, 2004, 03:58:33 pm »

Спасибо за советы и ссылки.
Но, с этими убийствами я доигрался. Убивать нужно было при отладке. После отладки стал тестировать и увидел, что сервер съедает память. Сделал простой эхо-сервер - ситуация та же. Причем если сервер убить и запустить заново - все нормально. Проблема только при первой загрузке сервера после рестарта системы. Извините за мурацкий вопрос: что это может быть?
Забыл сказать - qnx 4.25
Записан
Страниц: [1]
  Печать  
 
Перейти в: