> На сколько я смог разобраться на скорую руку это немного не > то - там использование RAS, а у мне надо Windows Socket. > > > стоит заглянуть сюда: http://program.dax.ru последняя > > рассылка был посвещена этой теме, правда там сделно на > > дельфи, но переделать проблемы нет - тоже апи. > > > > > > > Теперь собственно вопрос: как можно определить > > состояние > > > конкретного соединения (имея переменную SOCKET). > > > Если ты имеешь в виду этот сокет:
TServerWinsocket *Socket, то он даёт полную информацию о соединении,
читай хелп в Builder.
Недавно при работе с Windows Sockets сталкнулся с такой проблемой: определить статус соединения.
Значит ситуация такова. Моя программа подключается к серверу, после чего через нее с сервером общается другая программа (например лезет в Inernet). Когда все данные получены(отправлены) статус соединения с сервером меняется на CLOSE_WAIT.
Теперь собственно вопрос: как можно определить состояние конкретного соединения (имея переменную SOCKET).
PS: ситуация описана очень кратко, и поэтому если что-то непонятно, могу уточнить.
[C++] Вопрос по TCP13.12.01 08:25 Автор: Terrible Статус: Незарегистрированный пользователь
> Недавно при работе с Windows Sockets сталкнулся с такой > проблемой: определить статус соединения. Цитата из MSDN
TCP States As a Winsock programmer, you are not required to know the actual TCP states
Так что средства для получения статуса соединения в Winsock скорее всего отсутствуют, по крайней мере я их не нашел.
Winsock - это более высокий уровень, а статус соединения есть у TCP.
[C++] Вопрос по TCP10.12.01 18:20 Автор: Heromantor Статус: Незарегистрированный пользователь
> Че-то мало я понял... Но не select() ли тебе нужен?
Я его когда-то пробовал. Какие результаты он дал не помню точно, но по-моему он к состоянию CLOSE_WAIT относится так же как к состоянию ESTABLISHED, т.е. и в том, и в другом случае возращает одинаковые значения.
Я конечно еще раз попробую может я чего-то недочитал(недопробовал).
Хоть я и не понял, что такое close_wait и established10.12.01 18:51 Автор: PS <PS> Статус: Elderman
Но состояние сокета можно проверить recv c MSG_PEEKом.
Если вернет 0 - значит живой, но пустой. Если код ошибки, тогда анализируешь ее.
> > Че-то мало я понял... Но не select() ли тебе нужен? > > Я его когда-то пробовал. Какие результаты он дал не помню > точно, но по-моему он к состоянию CLOSE_WAIT относится так > же как к состоянию ESTABLISHED, т.е. и в том, и в другом > случае возращает одинаковые значения. > > Я конечно еще раз попробую может я чего-то > недочитал(недопробовал).
Хоть я и не понял, что такое close_wait и established10.12.01 19:17 Автор: Wizard(2) Статус: Незарегистрированный пользователь
> Но состояние сокета можно проверить recv c MSG_PEEKом. > Если вернет 0 - значит живой, но пустой. Если код ошибки, > тогда анализируешь ее. >
CLOSE_WAIT и ESTABLISHED это состояние соединения (есть еще такие: TIMED_WAIT, LISTEN, FIN_WAIT_1 и пр.). Можно посмотреть состояние всех соединений с помощью комманды Netstat.
Насчет recv(), то у нее есть недостаток - на этой функции программа останавливается и ждет, пока не прийдут какие-то данные (хотя я использовал ее без MSG_PEEK). Из-за этого пока я использую send(), с помощью которой посылаю 0 байт. (Я думаю результат аналогичен recv() с MSG_PEEK). НО и в одном(CLOSE_WAIT) и в другом( ESTABLISHED) случаях send() успешно завершается - вот в этом то и проблема.
Хоть я и не понял, что такое close_wait и established11.12.01 12:59 Автор: Heromantor Статус: Незарегистрированный пользователь
Аааа а я вот и думаю где я это видал - CLOSE_WAIT и т.д. точно в netstat, дык он же работает с SNMP. Так что рой туды, для начала можешь почитать ЭТО http://www.sources.ru/cpp/cpp_winsock_inside_1.shtml. А как получить состояние сокета через SNMP я не знаю ;(, прдеполагаю что это вряд-ли можно сделать...
Хоть я и не понял, что такое close_wait и established11.12.01 13:24 Автор: Wizard(2) Статус: Незарегистрированный пользователь
> Аааа а я вот и думаю где я это видал - CLOSE_WAIT и т.д. > точно в netstat, дык он же работает с SNMP. Так что рой > туды, для начала можешь почитать ЭТО > http://www.sources.ru/cpp/cpp_winsock_inside_1.shtml. А как > получить состояние сокета через SNMP я не знаю ;(, > прдеполагаю что это вряд-ли можно сделать... ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
В этом-то и проблема. Я даже уже скачал исходники програмы NetstatP (это аналог NetStat). Посмотрел - а там выдает общий список соединений, причем используя свои собственные переменные (насколько я понял несовместимые с SOCKET). А жаль :((
PS. А ЭТО я сейчас буду изучать(глядишь пригодится)
[C++] Вопрос по TCP10.12.01 15:28 Автор: Rook <Alex Sergeev> Статус: Member
стоит заглянуть сюда: http://program.dax.ru последняя рассылка был посвещена этой теме, правда там сделно на дельфи, но переделать проблемы нет - тоже апи.
> Недавно при работе с Windows Sockets сталкнулся с такой > проблемой: определить статус соединения. > > Значит ситуация такова. Моя программа подключается к > серверу, после чего через нее с сервером общается другая > программа (например лезет в Inernet). Когда все данные > получены(отправлены) статус соединения с сервером меняется > на CLOSE_WAIT. > > Теперь собственно вопрос: как можно определить состояние > конкретного соединения (имея переменную SOCKET). > > PS: ситуация описана очень кратко, и поэтому если что-то > непонятно, могу уточнить.
[C++] Вопрос по TCP10.12.01 16:45 Автор: Wizard(2) Статус: Незарегистрированный пользователь
На сколько я смог разобраться на скорую руку это немного не то - там использование RAS, а у мне надо Windows Socket.
> стоит заглянуть сюда: http://program.dax.ru последняя > рассылка был посвещена этой теме, правда там сделно на > дельфи, но переделать проблемы нет - тоже апи. > > > > Теперь собственно вопрос: как можно определить > состояние > > конкретного соединения (имея переменную SOCKET). > >
[C++] Вопрос по TCP11.12.01 01:31 Автор: Korsh <Мельников Михаил> Статус: Elderman
> На сколько я смог разобраться на скорую руку это немного не > то - там использование RAS, а у мне надо Windows Socket. > > > стоит заглянуть сюда: http://program.dax.ru последняя > > рассылка был посвещена этой теме, правда там сделно на > > дельфи, но переделать проблемы нет - тоже апи. > > > > > > > Теперь собственно вопрос: как можно определить > > состояние > > > конкретного соединения (имея переменную SOCKET). > > > Если ты имеешь в виду этот сокет:
TServerWinsocket *Socket, то он даёт полную информацию о соединении,
читай хелп в Builder.
[C++] Вопрос по TCP11.12.01 10:21 Автор: Wizard(2) Статус: Незарегистрированный пользователь
> > На сколько я смог разобраться на скорую руку это > немного не > > то - там использование RAS, а у мне надо Windows > Socket. > > > > > стоит заглянуть сюда: http://program.dax.ru > последняя > > > рассылка был посвещена этой теме, правда там > сделно на > > > дельфи, но переделать проблемы нет - тоже апи. > > > > > > > > > > Теперь собственно вопрос: как можно > определить > > > состояние > > > > конкретного соединения (имея переменную > SOCKET). > > > > > Если ты имеешь в виду этот сокет: > TServerWinsocket *Socket, то он даёт полную информацию о > соединении, > читай хелп в Builder.
Да у меня вообще-то Microsoft Visual C++ и пишу на API.