Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: SOCKET - CLOSE_WAIT  (Прочитано 11640 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« : 29-03-2012 08:49 » 

пришлось поработать с чистым винапишным сокетом , и вот такая беда приключилась. Иногда подключенный сокет клиента переходит в статус CLOSE_WAIT (за происходящим смотрим в TCPView ) - через час-два работы. И остаётся так висеть.  В сервере сделан отпин неактивных клиентов (если 5 минут нет данных вызов closesocket() ) .  Но тут и странность, что всё равно остаются сокеты висеть.

вопрос - как программно определяется текущий статус сокета (говорю про сокет из серверного массива клиентов , а не про сокет удалённого клиента) ?  Может быть, если я увижу, что статус стал CLOSE_WAIT , я просто напросто закрою сокет и проблема решится ?

Добавлено через 39 минут и 13 секунд:
если не сложно, дайте адекватный пример сервера на основе SOCKET . В тырнете ничего путного не ищется
« Последнее редактирование: 29-03-2012 09:28 от Алексей1153 » Записан

RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 29-03-2012 09:48 » 

CLOSE_WAIT - это нормальное поведение в рамках TCP. Длится порядка двух минут. К процессам они уже не привязаны.
Миновать данную стадию можно послав TCP-пакет с флагом RST. Вроде как winsock не умеет таким управлять.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.

"железокаменный метеорит" мог образоваться от расплавления металлических конструкций в результате например ядерного взрыва и стекания жидкого железа в какой нибудь щебень (c) Иванов С.
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #2 : 29-03-2012 09:50 » 

Рома, зак говорит - сокет висит до талого снега. Только после перезапуска программы отваливается

Добавлено через 2 минуты и 17 секунд:


CLOSE_WAIT - это нормальное поведение в рамках TCP. Длится порядка двух минут. К процессам они уже не привязаны.
Миновать данную стадию можно послав TCP-пакет с флагом RST. Вроде как winsock не умеет таким управлять.
это не вот этой функцией делается случайно ?
WSASendDisconnect
« Последнее редактирование: 29-03-2012 09:53 от Алексей1153++ » Записан

RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 29-03-2012 13:57 » 

WSA-функции дают дополнительный сервис. Работать с сокетами можно и без них. Попробуй еще функцию socketshutdown (не помню точно название) перед закрытием сокета.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.

"железокаменный метеорит" мог образоваться от расплавления металлических конструкций в результате например ядерного взрыва и стекания жидкого железа в какой нибудь щебень (c) Иванов С.
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #4 : 29-03-2012 16:10 » 

ок, попробую
Записан

darkelf
Молодой специалист

ua
Offline Offline

« Ответ #5 : 29-03-2012 17:07 » 

WSA-функции дают дополнительный сервис. Работать с сокетами можно и без них. Попробуй еще функцию socketshutdown (не помню точно название) перед закрытием сокета.
просто shutdown()
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #6 : 30-03-2012 03:49 » 

В винде все через Ж...
Простое закрытие сокета должно приводить к сбросу буферов и последующей инициации завершения.
Может у тебя файрволы мешаются?
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.

"железокаменный метеорит" мог образоваться от расплавления металлических конструкций в результате например ядерного взрыва и стекания жидкого железа в какой нибудь щебень (c) Иванов С.
darkelf
Молодой специалист

ua
Offline Offline

« Ответ #7 : 30-03-2012 05:26 » 

кстати, если не ошибаюсь программно закрытый с той стороны дескриптор можно определить довольно просто - попробовать туда что-нибудь выдать, в ответ должен прийти EPIPE (а в unix, если не сделано дополнительных действий, ещё и SIGPIPE). Хотя, имхо, это и не выход.
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #8 : 30-03-2012 10:39 » 

RXL, дело там, похоже, не в shutdown - с ним не поменялось. Кое что выясняем, делаю подробный лог.
Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #9 : 30-03-2012 11:48 » 

во всём была виновата тупая очепятка Жаль 
Записан

zubr
Команда клуба

by
Offline Offline
Пол: Мужской

« Ответ #10 : 30-03-2012 12:14 » 

Во, во, а то сразу - Windows мастдай
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #11 : 30-03-2012 12:18 » 

Хор: Маст дай, маст дай! Виндовс маст дай!  А вот не подеретесь!
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.

"железокаменный метеорит" мог образоваться от расплавления металлических конструкций в результате например ядерного взрыва и стекания жидкого железа в какой нибудь щебень (c) Иванов С.
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #12 : 30-03-2012 15:07 » 

ха ха, устроили тут ))
Записан

vs
Новенький

ru
Offline Offline

« Ответ #13 : 13-01-2016 09:36 » 

Алексей++,
добрый день,
аналогичная проблема:
делаю shutdown и closesocket
а secketы накапливаются с CLOSE_WAIT
неужели тоже опечатка ?
подскажите, какая была у вас - проверю у себя

С уважением
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #14 : 14-01-2016 05:01 » new

vs, ой, я уж не помню, что там было ))

видимо, тоже лог придётся вести и смотреть, где действия неправильные. Что-то где-то недовызывается
Записан

Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines