![]() |
Модераторы: feodorv |
![]() ![]() ![]() |
|
nerdy_weirdie |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 179 Регистрация: 16.1.2007 Репутация: нет Всего: нет |
Добрый день. Тема уже поднималась, но надежного решения я так и не увидел.
Есть сервер, обслуживающий клиентов. Работает на основе ТСР. После завершения сеанса некоторый небольшой процент соединений остается висеть вечно в состоянии CLOSE_WAIT после закрытия сокета. Где-то 1 из 1000. В результате система со временем падает. Закрытие сокета всегда происходит следующим образом
timed_recv исключений не выбрасывает, реализована при помощи select, recv. Как реализовать надежное и универсальное закрытие сокетов чтобы не оставалось CLOSE_WAIT? |
|||
|
||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 13 Всего: 110 |
||||
|
||||
nerdy_weirdie |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 179 Регистрация: 16.1.2007 Репутация: нет Всего: нет |
Это я нетстатом смотрю перечень сокетов в системе. Кстати да, система Windows Server 2003. Компилировал в VS2005. Это сообщение отредактировал(а) nerdy_weirdie - 30.3.2011, 16:34 |
|||
|
||||
nerdy_weirdie |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 179 Регистрация: 16.1.2007 Репутация: нет Всего: нет |
Добавил
|
|||
|
||||
nerdy_weirdie |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 179 Регистрация: 16.1.2007 Репутация: нет Всего: нет |
Ё-маё, неужели никто свой серверный апп никогда до ума не доводил?
|
|||
|
||||
boostcoder |
|
||||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 13 Всего: 110 |
доводил. но написанный с использованием asio ;) Добавлено через 2 минуты и 16 секунд а отправку не пробовали? так:
Добавлено через 3 минуты и 45 секунд ааа, отправка запрещена в первой строке ![]() Добавлено через 8 минут и 25 секунд почитайте: http://www.opennet.ru/base/dev/reuses.txt.html как раз на вашу тему. ну и отпишитесь, если поможет ;) Добавлено через 9 минут и 48 секунд и вообще.. в гугле полно инфы по подобной проблеме: http://www.google.ru/search?sourceid=chrom...mp;q=CLOSE_WAIT неужели ничего не помогло? |
||||
|
|||||
Олег2005 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 421 Регистрация: 26.5.2005 Где: Рига Латвия Репутация: 6 Всего: 11 |
На полученный от клиента сегмент FIN TCP-модуль сервера отсылает клиенту ACK и переходит в состояние CLOSE_WAIT.
Сокет клиента, получив этот ACK от сервера, переходит в состояние FIN_WAIT_2, ожидая FIN от сервера. Чтобы отослать клиенту FIN, сервер должен со своей стороны вызвать shutdown(sd, SHUT_WR). В некоторых руководствах сказано, что close() на серверном сокете автоматически выполняет и shutdown(), но в ходе экспериментов на RED HAT 9 было выяснено, что это не так и следует вызывать shutdown(sd, SHUT_WR) явно, иначе после close() серверный сокет так и останется висеть в CLOSE_WAIT, а клиентский в FIN_WAIT_2 (т.е. будут orphan'ами). Думаю что и на виндах так надо делать - во всяком случае пробоватьь Это сообщение отредактировал(а) Олег2005 - 3.4.2011, 20:01 |
|||
|
||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Сети | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |