Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« : 29-03-2012 08:49 » |
|
пришлось поработать с чистым винапишным сокетом , и вот такая беда приключилась. Иногда подключенный сокет клиента переходит в статус CLOSE_WAIT (за происходящим смотрим в TCPView ) - через час-два работы. И остаётся так висеть. В сервере сделан отпин неактивных клиентов (если 5 минут нет данных вызов closesocket() ) . Но тут и странность, что всё равно остаются сокеты висеть.
вопрос - как программно определяется текущий статус сокета (говорю про сокет из серверного массива клиентов , а не про сокет удалённого клиента) ? Может быть, если я увижу, что статус стал CLOSE_WAIT , я просто напросто закрою сокет и проблема решится ?
Добавлено через 39 минут и 13 секунд: если не сложно, дайте адекватный пример сервера на основе SOCKET . В тырнете ничего путного не ищется
|
|
« Последнее редактирование: 29-03-2012 09:28 от Алексей1153 »
|
Записан
|
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #1 : 29-03-2012 09:48 » |
|
CLOSE_WAIT - это нормальное поведение в рамках TCP. Длится порядка двух минут. К процессам они уже не привязаны. Миновать данную стадию можно послав TCP-пакет с флагом RST. Вроде как winsock не умеет таким управлять.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #2 : 29-03-2012 09:50 » |
|
Рома, зак говорит - сокет висит до талого снега. Только после перезапуска программы отваливается Добавлено через 2 минуты и 17 секунд:CLOSE_WAIT - это нормальное поведение в рамках TCP. Длится порядка двух минут. К процессам они уже не привязаны. Миновать данную стадию можно послав TCP-пакет с флагом RST. Вроде как winsock не умеет таким управлять.
это не вот этой функцией делается случайно ? WSASendDisconnect
|
|
« Последнее редактирование: 29-03-2012 09:53 от Алексей1153++ »
|
Записан
|
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #3 : 29-03-2012 13:57 » |
|
WSA-функции дают дополнительный сервис. Работать с сокетами можно и без них. Попробуй еще функцию socketshutdown (не помню точно название) перед закрытием сокета.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #4 : 29-03-2012 16:10 » |
|
ок, попробую
|
|
|
Записан
|
|
|
|
darkelf
Молодой специалист
Offline
|
|
« Ответ #5 : 29-03-2012 17:07 » |
|
WSA-функции дают дополнительный сервис. Работать с сокетами можно и без них. Попробуй еще функцию socketshutdown (не помню точно название) перед закрытием сокета.
просто shutdown()
|
|
|
Записан
|
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #6 : 30-03-2012 03:49 » |
|
В винде все через Ж... Простое закрытие сокета должно приводить к сбросу буферов и последующей инициации завершения. Может у тебя файрволы мешаются?
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
darkelf
Молодой специалист
Offline
|
|
« Ответ #7 : 30-03-2012 05:26 » |
|
кстати, если не ошибаюсь программно закрытый с той стороны дескриптор можно определить довольно просто - попробовать туда что-нибудь выдать, в ответ должен прийти EPIPE (а в unix, если не сделано дополнительных действий, ещё и SIGPIPE). Хотя, имхо, это и не выход.
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #8 : 30-03-2012 10:39 » |
|
RXL, дело там, похоже, не в shutdown - с ним не поменялось. Кое что выясняем, делаю подробный лог.
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #9 : 30-03-2012 11:48 » |
|
во всём была виновата тупая очепятка
|
|
|
Записан
|
|
|
|
zubr
Гость
|
|
« Ответ #10 : 30-03-2012 12:14 » |
|
Во, во, а то сразу - Windows мастдай
|
|
|
Записан
|
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #11 : 30-03-2012 12:18 » |
|
Хор: Маст дай, маст дай! Виндовс маст дай!
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #12 : 30-03-2012 15:07 » |
|
ха ха, устроили тут ))
|
|
|
Записан
|
|
|
|
vs
Новенький
Offline
|
|
« Ответ #13 : 13-01-2016 09:36 » |
|
Алексей++, добрый день, аналогичная проблема: делаю shutdown и closesocket а secketы накапливаются с CLOSE_WAIT неужели тоже опечатка ? подскажите, какая была у вас - проверю у себя
С уважением
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #14 : 14-01-2016 05:01 » |
|
vs, ой, я уж не помню, что там было ))
видимо, тоже лог придётся вести и смотреть, где действия неправильные. Что-то где-то недовызывается
|
|
|
Записан
|
|
|
|
|