Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2005.11.13;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.056 c
4-1126187893
ANB
2005-09-08 17:58
2005.11.13
При каких условиях отрабатывает WaitFoInputIdle ?


6-1122587129
nik2be
2005-07-29 01:45
2005.11.13
Перехват и замена содержимого пакета в реальном времени


6-1113246676
Sergey12345
2005-04-11 23:11
2005.11.13
чат на winsock


2-1129729392
nikolas
2005-10-19 17:43
2005.11.13
Проблема с массивом


2-1130050454
beglec
2005-10-23 10:54
2005.11.13
Можно ли узнать имя процедуры.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский