Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2012.01.01;
Скачать: CL | DM;

Вниз

Заброшенные сокеты   Найти похожие ветки 

 
Евгений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;
Скачать: CL | DM;

Наверх




Память: 0.57 MB
Время: 0.01 c
2-1316902702
Undria
2011-09-25 02:18
2012.01.01
Не работает код в Delphi XE2


15-1316092006
Железкин
2011-09-15 17:06
2012.01.01
не включается комп, может кто сталкивался?


2-1317089272
я
2011-09-27 06:07
2012.01.01
Имитация нажатия клавиш


1-1278075174
ifmomax
2010-07-02 16:52
2012.01.01
Windows-service.Некорректное чтение бинарного файла.


8-1221793304
Cout
2008-09-19 07:01
2012.01.01
горизонтальный курсор