Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
| | | |
Хоть я и не понял, что такое close_wait и established 10.12.01 19:17 Число просмотров: 2100
Автор: 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() успешно завершается - вот в этом то и проблема.
|
<programming>
|
[C++] Вопрос по TCP 10.12.01 14:21
Автор: Wizard(2) Статус: Незарегистрированный пользователь
|
Недавно при работе с Windows Sockets сталкнулся с такой проблемой: определить статус соединения.
Значит ситуация такова. Моя программа подключается к серверу, после чего через нее с сервером общается другая программа (например лезет в Inernet). Когда все данные получены(отправлены) статус соединения с сервером меняется на CLOSE_WAIT.
Теперь собственно вопрос: как можно определить состояние конкретного соединения (имея переменную SOCKET).
PS: ситуация описана очень кратко, и поэтому если что-то непонятно, могу уточнить.
|
|
[C++] Вопрос по TCP 13.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++] Вопрос по TCP 10.12.01 18:20
Автор: Heromantor Статус: Незарегистрированный пользователь
|
Че-то мало я понял... Но не select() ли тебе нужен?
|
| |
[C++] Вопрос по TCP 10.12.01 18:34
Автор: Wizard(2) Статус: Незарегистрированный пользователь
|
> Че-то мало я понял... Но не select() ли тебе нужен?
Я его когда-то пробовал. Какие результаты он дал не помню точно, но по-моему он к состоянию CLOSE_WAIT относится так же как к состоянию ESTABLISHED, т.е. и в том, и в другом случае возращает одинаковые значения.
Я конечно еще раз попробую может я чего-то недочитал(недопробовал).
|
| | |
Хоть я и не понял, что такое close_wait и established 10.12.01 18:51
Автор: PS <PS> Статус: Elderman
|
Но состояние сокета можно проверить recv c MSG_PEEKом.
Если вернет 0 - значит живой, но пустой. Если код ошибки, тогда анализируешь ее.
> > Че-то мало я понял... Но не select() ли тебе нужен? > > Я его когда-то пробовал. Какие результаты он дал не помню > точно, но по-моему он к состоянию CLOSE_WAIT относится так > же как к состоянию ESTABLISHED, т.е. и в том, и в другом > случае возращает одинаковые значения. > > Я конечно еще раз попробую может я чего-то > недочитал(недопробовал).
|
| | | |
Хоть я и не понял, что такое close_wait и established 10.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 и established 11.12.01 12:59
Автор: Heromantor Статус: Незарегистрированный пользователь
|
Аааа а я вот и думаю где я это видал - CLOSE_WAIT и т.д. точно в netstat, дык он же работает с SNMP. Так что рой туды, для начала можешь почитать ЭТО http://www.sources.ru/cpp/cpp_winsock_inside_1.shtml. А как получить состояние сокета через SNMP я не знаю ;(, прдеполагаю что это вряд-ли можно сделать...
|
| | | | | |
Хоть я и не понял, что такое close_wait и established 11.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++] Вопрос по TCP 10.12.01 15:28
Автор: Rook <Alex Sergeev> Статус: Member
|
стоит заглянуть сюда: http://program.dax.ru последняя рассылка был посвещена этой теме, правда там сделно на дельфи, но переделать проблемы нет - тоже апи.
> Недавно при работе с Windows Sockets сталкнулся с такой > проблемой: определить статус соединения. > > Значит ситуация такова. Моя программа подключается к > серверу, после чего через нее с сервером общается другая > программа (например лезет в Inernet). Когда все данные > получены(отправлены) статус соединения с сервером меняется > на CLOSE_WAIT. > > Теперь собственно вопрос: как можно определить состояние > конкретного соединения (имея переменную SOCKET). > > PS: ситуация описана очень кратко, и поэтому если что-то > непонятно, могу уточнить.
|
| |
[C++] Вопрос по TCP 10.12.01 16:45
Автор: Wizard(2) Статус: Незарегистрированный пользователь
|
На сколько я смог разобраться на скорую руку это немного не то - там использование RAS, а у мне надо Windows Socket.
> стоит заглянуть сюда: http://program.dax.ru последняя > рассылка был посвещена этой теме, правда там сделно на > дельфи, но переделать проблемы нет - тоже апи. > > > > Теперь собственно вопрос: как можно определить > состояние > > конкретного соединения (имея переменную SOCKET). > >
|
| | |
[C++] Вопрос по TCP 11.12.01 01:31
Автор: Korsh <Мельников Михаил> Статус: Elderman
|
> На сколько я смог разобраться на скорую руку это немного не > то - там использование RAS, а у мне надо Windows Socket. > > > стоит заглянуть сюда: http://program.dax.ru последняя > > рассылка был посвещена этой теме, правда там сделно на > > дельфи, но переделать проблемы нет - тоже апи. > > > > > > > Теперь собственно вопрос: как можно определить > > состояние > > > конкретного соединения (имея переменную SOCKET). > > > Если ты имеешь в виду этот сокет:
TServerWinsocket *Socket, то он даёт полную информацию о соединении,
читай хелп в Builder.
|
| | | |
[C++] Вопрос по TCP 11.12.01 10:21
Автор: Wizard(2) Статус: Незарегистрированный пользователь
|
> > На сколько я смог разобраться на скорую руку это > немного не > > то - там использование RAS, а у мне надо Windows > Socket. > > > > > стоит заглянуть сюда: http://program.dax.ru > последняя > > > рассылка был посвещена этой теме, правда там > сделно на > > > дельфи, но переделать проблемы нет - тоже апи. > > > > > > > > > > Теперь собственно вопрос: как можно > определить > > > состояние > > > > конкретного соединения (имея переменную > SOCKET). > > > > > Если ты имеешь в виду этот сокет: > TServerWinsocket *Socket, то он даёт полную информацию о > соединении, > читай хелп в Builder.
Да у меня вообще-то Microsoft Visual C++ и пишу на API.
|
|
|