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

Вниз

WSACleanup   Найти похожие ветки 

 
Ильичев С.А. ©   (2005-07-26 20:55) [0]

Объясните мне пожалуйста, как так.

Во втором потоке открываю сокет на прослушивание.
В первом вызываю WSACleanup.
Сокет остаётся.
Вызываю WSACleanup + TerminateThread.
Поток умирает, сокет остаётся.
Проверяю код возврата.
WSACleanup = 0.

Читаю MSDN.

Sockets that were open when WSACleanup was called are reset and automatically deallocated as if closesocket were called;
_и вот ещё
In a multithreaded environment, WSACleanup terminates Windows Sockets operations for all threads.


 
Чапаев ©   (2005-07-27 09:34) [1]

А что значит "сокет остаётся"?


 
Ильичев С.А. ©   (2005-07-27 11:45) [2]

2 Чапаев

Значит что порт который я заказывал открыт от имени моего процесса.
И к нему можно подключиться.


 
Digitman ©   (2005-07-27 11:51) [3]


> к нему можно подключиться


читай в msdn requires-комментарии для сервера:

Requires Windows Server 2003, Windows 2000 Server, or Windows NT Server.

а у тебя - WinXP ..


 
GLFox ©   (2005-07-27 11:54) [4]

>Digitman ©   (27.07.05 11:51) [3]
А еще там написано следующее:
Included in Windows XP, Windows 2000 Professional, Windows NT Workstation, Windows Me, Windows 98, and Windows 95.


 
Digitman ©   (2005-07-27 12:33) [5]


> GLFox ©   (27.07.05 11:54) [4]


где там это написано ?

я смотрю это

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winsock/winsock/wsacleanup_2.asp

и не вижу там ничего подобного.. хотя и без этого понятно, что ф-ция включена в состав WinsockAPI перечисленных тобой ОС

другой вопрос,  КАК ведет себя эта ф-ция на той или иной ОС..


 
GLFox ©   (2005-07-27 12:39) [6]

>Digitman ©   (27.07.05 12:33) [5]

Именно по этому адресу и написано! Тебя наверно вводит в заблуждение надписи типа "Client: requires..." и "Server: requires...". Там не имеется ввиду приложение, а только система.


 
DiamondShark ©   (2005-07-27 12:45) [7]

У дигитмана вообще хронические проблемы с чтением книг без видения фиг.


 
Digitman ©   (2005-07-27 13:00) [8]


> Там не имеется ввиду приложение, а только система


и я речь веду о системе


 
Digitman ©   (2005-07-27 13:06) [9]


> DiamondShark ©   (27.07.05 12:45) [7]


тявкание из-за угла ?

или по сабжу есть что сказать ?


 
DiamondShark ©   (2005-07-27 14:11) [10]


> Digitman ©   (27.07.05 13:06) [9]

Тявкал твой дед.

А по сабжу есть что сказать.
Например, поинтересоваться у автора, уверен ли он, что у него WSAStartup вызывается одни, а не несколько раз, и что количество вызовов WSACleanup равно количеству вызовов WSAStartup.

Вот только не уверен, что он захочет отвечать на наводящие вопросы, после того, как ты тут вонищу развёл.


 
Ильичев С.А. ©   (2005-07-27 14:27) [11]

Проверить сейчас негде, но уверен что проблема в  >[3] Digitman.

Только я не понял как с этим бороться.
То есть мне надо из первого потока закрывать сокет во втором.
И других вариантов не что ли ?


 
Ильичев С.А. ©   (2005-07-27 14:31) [12]

2 DiamondShark

А ты чё такой наглый ?


 
DiamondShark ©   (2005-07-27 14:33) [13]


> Ильичев С.А. ©   (27.07.05 14:27) [11]

В [3] тебе пургу нагнали.
Описанное поведение возможно только в случае, когда WSAStartup вызывается несколько раз.
Тогда все вызовы WSACleanup, кроме последнего, будут холостыми.

Анализируй код, ищи лишние вызовы WSAStartup.


 
DiamondShark ©   (2005-07-27 14:34) [14]


> Ильичев С.А. ©   (27.07.05 14:31) [12]

Не нравится -- иди в жопу.
Для него стараются, а он тут ещё морализаторством занялся.


 
Digitman ©   (2005-07-27 14:55) [15]


> DiamondShark ©   (27.07.05 14:34) [14]


редкий ты хам, сударь.
реже меня - уж точно))


> Ильичев С.А


мысль насчет равенства кол-ва вызовов Startup кол-ву вызовов Cleanup, разумеется, верная - открытая в ДАННОМ трэде сессия должна быть закрыта ... но начиналось это с маздайной платформы, о которой и идет речь в борландовской справке ..  к моменту актуализации NT-based ОС баланс вызовов этих ф-ций также должен соблюдаться, но теперь уже на уровне процесса в целом

с др.стороны непонятно, почему ты игнорируешь явные closesocket(), пытаясь оборвать разом все соединения упомянутым сомнительным способом .. причем - неизвестно в каких тредах ..


 
Ильичев С.А. ©   (2005-07-28 01:04) [16]

2 DiamondShark
Уж кому там место, так это тебе.

2 Digitman
С равенством всё в порядке.

А closesocket() я не игнорирую. Пока что так и сделал, но хотелось бы разобраться что к чему.


 
Digitman ©   (2005-07-28 10:34) [17]


> Ильичев С.А. ©   (28.07.05 01:04) [16]


обрати внимание на порядок и логику вызовов WSAStartup/Cleanup самим Борландом в классt TCustomWinSocket

как известно, Борланд писал эти классы руководствуясь соображениями совместимости своего кода с маздайной и НТ-платформой

в этих классах не делается никаких предположений относительно трэдов, в которых вызываются эти ф-ции - всякий раз при конструировании объекта класса TCustomWinSocket безо всяких проверок вызывается WSAStartup(), а при разрушении объекта - соотв-но WSACleanup

это

http://book.itep.ru/7/sock_71.htm

тебе должно хоть чем-то помочь


 
Ильичев С.А. ©   (2005-07-28 13:24) [18]

Да я не использую TCustomWinSocket.
Только
socket()
bind()
listen()


 
DiamondShark ©   (2005-07-28 13:43) [19]


> С равенством всё в порядке.

Брешешь.
Ситуация, описанная у тебя в вопросе воспроизводится только при одном условии: несоответствие количества вызовов стартап и клинап.

Либо описывай точнее, либо ищи в коде несоответсвие, либо приводи минимальный законченый воспроизводимый код.


 
Digitman ©   (2005-07-28 14:05) [20]


> Ильичев С.А. ©   (28.07.05 13:24) [18]
> Да я не использую TCustomWinSocket.


а кто от тебя это требует ?

не хочешь ? не используй !

я просто порекомендовал тебе посмотреть, как сам Борланд работает с этими ф-циями в этом классе ... а работает он с ними вполне корректно и осмысленно, хотя его логика как бы явно противоречит msdn-описанию - разрушение экз-ра TCustomWinSocket, при котором вызывается WSACleanup, никак не влияет на работу прочих гнезд (созданных в том же и иных трэдах),  ассоциированных с другими экз-рами TCustomWinSocket


> In a multithreaded environment, WSACleanup terminates Windows
> Sockets operations for all threads


здесь, вероятно, имелось ввиду, что созданное в некоем трэде (после WSAStartup) гнездо м.б. использовано не только в создавшем его трэде, но и в иных трэдах процесса ... при этом если создавший гнездо трэд выполнил WSACleanup не вызвав closesocket(), прочие трэды, инициировавшие некие операции (синхронные или асинхронные) с этим гнездом, в рез-те вызова трэдом-создателем ф-ции WSACleanup получат отказ : гнездо после WSACleanup более не существует


 
Ильичев С.А. ©   (2005-08-01 05:22) [21]

Всё, нашёл ошибку. Спасибо.


 
Digitman ©   (2005-08-01 13:16) [22]


> Ильичев С.А. ©   (01.08.05 05:22) [21]


делись ..



Страницы: 1 вся ветка

Текущий архив: 2005.11.13;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.054 c
14-1130153575
bSava
2005-10-24 15:32
2005.11.13
А что собственно с поиском по сайту?


4-1125218505
rolex
2005-08-28 12:41
2005.11.13
Функция показывает, что в папке Prefetch файлы в использовании!


2-1129433833
intel
2005-10-16 07:37
2005.11.13
глюк формы


14-1130224821
syte_ser78
2005-10-25 11:20
2005.11.13
програмирование сом/лпт


2-1129801911
SMATMP
2005-10-20 13:51
2005.11.13
TImage.Bitmap