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

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

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

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


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

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

Добавлено через 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 (не помню точно название) перед закрытием сокета.
Записан

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

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


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

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

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

no
Offline Offline

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

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

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

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

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

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

no
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
Гость
« Ответ #10 : 30-03-2012 12:14 » 

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

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

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

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

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

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 » 

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

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

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

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines