Форум: "Начинающим";
Текущий архив: 2012.01.01;
Скачать: [xml.tar.bz2];
ВнизЗаброшенные сокеты Найти похожие ветки
← →
Евгений07 (2011-09-16 16:47) [0]Доброго времени!
Встал такой вопрос: что делать с брошенными клиентом сокетами?
Пример
Сторонняя прога запускает мою ДЛЛ
Клиентский сокет подключается к моему серверу
Сторонняя прога вырубает мою ДЛЛ. Без объявления
Сервером не могу вырубить сокет клиента
Сторонняя прога опять запускает мою ДЛЛ
Клиентский сокет хочет подключиться к моему серверу
← →
DiamondShark © (2011-09-16 19:20) [1]Если русский язык для вас родной, то стоит подумать о визите к психиатру, поскольку подобная речь -- очень тревожный симптом.
← →
Rouse_ © (2011-09-16 19:25) [2]
> Сторонняя прога вырубает мою ДЛЛ. Без объявления
> Сервером не могу вырубить сокет клиента
должно пройти уведомление о разрыве сессии (ну тут смотря какая модель транспорта используется, но в итоге все равно уведомление есть).
В любом случае при повторном соединении проблем быть не должно, или неверно описан механизм.
← →
Евгений07 (2011-09-16 20:25) [3]DiamondShark © (16.09.11 19:20) [1]
Если русский язык для вас родной
Сторонняя прога запускает мою ДЛЛ
Клиентский сокет подключается к серверу
Сторонняя прога вырубает мою ДЛЛ.
Сервер не вырубает клиента
Сторонняя прога опять запускает мою ДЛЛ
Клиентский же сокет тащится к серверу
Да я же поэт сокетов!
← →
Sha © (2011-09-16 20:42) [4]Кто понял, причем тут сторонняя прога и его ДЛЛ?
← →
Rouse_ © (2011-09-16 21:06) [5]Ну судя по всему клиент находится в библиотеке...
← →
Sha © (2011-09-16 21:09) [6]Ну как придет, пусть расскажет:
1 Какие операции с сокетами выполняет программа, какие - DLL?
2 Срубает DLL - что это значит?
3 Что сохранилось в контексте? Что утекло? Какие операции повисли?
4 Снова запускает - что это значит?
5 Контекст очищен? Все снова - здорово?
← →
Евгений07 (2011-09-16 21:50) [7]
> Rouse_ © (16.09.11 19:25) [2
С клиентом могут быть ситуации:
1. Вырублена прога с длл клиентом
2. Вырублена длл, сокет жив
включена длл повторно
Ситуация с сервером: перезапущен слушающий сокет
1. включен клиент = все нормально
2. включена прога с вырубленной длл, сокет жив
У моего сервера 1 клиент
← →
Rouse_ © (2011-09-16 22:22) [8]
> 2. Вырублена длл, сокет жив
С клиентской или серверной стороны?
← →
Евгений07 (2011-09-16 22:51) [9]С клиентской стороны?
← →
Евгений07 (2011-09-16 22:52) [10]Rouse_ © (16.09.11 22:22) [8]
Сокет с жив клиентской стороны
← →
Евгений07 (2011-09-16 23:11) [11]Rouse_ © (16.09.11 22:22) [8]
Прошу прощения
> Евгений07 (16.09.11 22:52) [10]
>
> Rouse_ © (16.09.11 22:22) [8]
> Сокет с жив клиентской стороны
Не правильный ответ
Вырубается длл с клиентом
На сервере остается сокет с соединением
На перезапуск сокета отвечает 10038 ошибкой
Убирается перезагрузкой серверной проги
← →
sniknik © (2011-09-16 23:18) [12]> Не правильный ответ
это экзамен?
> На перезапуск сокета отвечает 10038 ошибкой
???
это не "сокет занят" из-за того что "срублен", это "сокетная операция на "не сокете"", т.е. обьект/значение в переменной содержащей указатель на обьект перестало быть сокетом...
короче, кривой код не обрабатывает ошибки, а засоряет переменные "мусором".
← →
DVM © (2011-09-16 23:26) [13]Вырублена длл - это что такое?
← →
Sha © (2011-09-16 23:42) [14]Ну ясно же, это когда ее срубили, а снова не запустили.
← →
DVM © (2011-09-17 00:03) [15]
> Sha © (16.09.11 23:42) [14]
Тогда возникает другой вопрос, что такое срубили? :)
"Заброшенные сокеты" - хорошее название для книги или фильма.
← →
Sha © (2011-09-17 00:09) [16]Мне тоже так подумалось.
В тексте еще встречаются живые сокеты, которых бросил клиент. Почему-то хочется их обогреть и накормить.
← →
Игорь Шевченко © (2011-09-17 00:13) [17]Sha © (17.09.11 00:09) [16]
А автору хочется их прибить, чтобы не мучились
← →
Евгений07 (2011-09-17 00:24) [18]Немного отхлебнул из "Программирование в сетях виндовс", подумал.
Получается, что когда вырубают мою длл, то отключают все ссылки на сокет клиента. Но сокет жив! У него просто грохнули хозяина
Надо посмотреть, может ли сокет сервера отдать команду секету клиента закройся напрямую, без хозяина,
А новая длл к старому сокету доступа не имеет и иметь не может. Соответственно пытается завести нового
← →
Sha © (2011-09-17 00:28) [19]клиента или хозяина?
← →
Евгений07 (2011-09-17 00:28) [20]Спать.
Убить сокет.
Пусть мне приснится киллер сокета
← →
Sha © (2011-09-17 00:48) [21]Общество защиты сокетов рекомендует выгуливать их в ошейниках.
Ошейник позволит отличить домашний сокет от дикого,
а номерок на ошейнике - определить его хозяина.
← →
Германн © (2011-09-17 00:54) [22]
> короче, кривой код не обрабатывает ошибки, а засоряет переменные
> "мусором".
+1
А сокеты "убить" - это нужно очень постараться!
← →
DiamondShark © (2011-09-17 00:54) [23]
> "Заброшенные сокеты" - хорошее название для книги или фильма.
Lost Socks
(в переводе студии "Полный П")
← →
Inovet © (2011-09-17 09:52) [24]> [18] Евгений07 (17.09.11 00:24)
> Немного отхлебнул из "Программирование в сетях виндовс", подумал.
Ты точно из того источника отхлебнул? Может поэзия сокетов от другого попёрла.
← →
sniknik © (2011-09-17 10:21) [25]> Но сокет жив!
ну прямо живее всех живых... если объект закрыт/освобожден, ссылка на него сразу становится "мусором", неважно что в ней еще есть указатель и по нему видны данные... сам объект уже не жив, и это даже не зомби, это труп.
> Немного отхлебнул из "Программирование в сетях виндовс", подумал.
не о там наверное... надо об основах думать в твоем случае. (ИМХО)
← →
Евгений07 (2011-09-20 01:38) [26]Сокет взят.
Последняя капля его крови:
WSAGetLastError = 6
Пол дня рыл в инете. Нету халявы. Нету
Оказалось, в WinSock2 6 = WSA_INVALID_HANDLE
Там есть еще несколько кодов меньше WSABASEERR
← →
Inovet © (2011-09-20 09:10) [27]> [26] Евгений07 (20.09.11 01:38)
> Пол дня рыл в инете. Нету халявы. Нету
С такими вопросами как сдесь и не удивительно.
← →
sniknik © (2011-09-20 09:31) [28]сразу после значимой информации (код ошибки) тебе сказали, что в переменной мусор... т.е. бесплатное консультирование вместо платного ЦТО. что это как не халява?
нежелание понимать ответы это твоя проблема. и вот теперь "вах. все дело в хендле инвалид, а вы мужики то, в инете, и не знали". повторил другими словами, что в переменной мусор, и это типа решение... LOL
← →
Евгений07 (2011-09-20 11:37) [29]
> sniknik © (20.09.11 09:31) [28]
хендле инвалид вылез, когда я изменил сокет, найдя в чужой проге способ правильно завершить работу связи со стороны клиента.
А если бы не смог?
В процессе работы нить клиента с ДЛЛ может отключатся и подключатся сама
При отключении нити с ДЛЛ грохаются переменные, связанные с сокетами, а сокеты остаются,
Можно конечно было на новое подключение создавать новый сокет, а что было делать со старыми?
И сколько их было бы?
Первый вопрос остался:
как можно со стороны сервера убрать сокеты, к которым со стороны клиента нет переменных.
Требования к ДЛЛ специфичны
← →
Сергей М. © (2011-09-20 11:58) [30]> нить клиента с ДЛЛ может отключатся и подключатся сама
Это как ?)
← →
Евгений07 (2011-09-20 12:03) [31]как можно со стороны сервера убрать сокеты клиента, к которым со стороны клиента утрачены ссылки.
Так правильно
> sniknik © (20.09.11 09:31) [28]
В правильном ответе на нужно интерпретированный отвечающим вопрос тоже есть польза, но для задающего лучший ответ на его вопрос, пусть и не не точно сформулированный.
← →
Сергей М. © (2011-09-20 12:08) [32]
> как можно со стороны сервера убрать сокеты клиента, к которым
> со стороны клиента утрачены ссылки
Да никак)
← →
sniknik © (2011-09-20 13:02) [33]> как можно со стороны сервера убрать сокеты клиента, к которым со стороны клиента утрачены ссылки.
а как можно со стороны ... ну скажем бывшей "любовницы" убрать запись (указатель на) о себе из записных книжек бывших "любовников"?
или скажем со стороны квартиры из листка (указателя) приезжающей тещи?
... и т.д.
указатель на что-то не может быть разрушен со стороны объекта, чтобы с этим самым объектом не случилось... (правило, исключения могут быть, но... )
← →
sniknik © (2011-09-20 13:06) [34]>> нить клиента с ДЛЛ может отключатся и подключатся сама
> Это как ?)
крибле-крабле-бумс...
так примерно. ;)
← →
Сергей М. © (2011-09-20 13:09) [35]
> крибле-крабле-бумс...
> так примерно
))
Похоже на то, судя по описанию)
← →
Евгений07 (2011-09-20 19:01) [36]Нить моего клиента управляется сторонней прогой, по своей логике
← →
Евгений07 (2011-09-20 19:07) [37]
> Сергей М. © (20.09.11 12:08) [32]
> Да никак)
И это похоже на чистую голую истину.
Никакой надежды слесарю гинекологу с процессором
← →
sniknik © (2011-09-20 19:28) [38]> Нить моего клиента управляется сторонней прогой, по своей логике
и что?
> Никакой надежды слесарю гинекологу с процессором
ну почему же? есть "запасная" надежда для всех, на нанятого программиста...
← →
sniknik © (2011-09-20 19:40) [39]> и что?
в смысле. - чем это мешает исправить ошибки в твоем коде?
← →
Евгений07 (2011-09-20 21:45) [40]Ошибки исправил.
Сделал как положено клиенту = closeSocet
Но перехватить смог не все ситуации завершения нити с ДЛЛ
Если припрет, буду думать
Пока все работает
Страницы: 1 2 вся ветка
Форум: "Начинающим";
Текущий архив: 2012.01.01;
Скачать: [xml.tar.bz2];
Память: 0.54 MB
Время: 0.007 c