информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Где водятся OGRыВсе любят медАтака на Internet
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 На GitHub пугают ложными предупреждениями... 
 Атака на пользователей больших... 
 Notepad++ полгода раздавал зараженные... 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
[C++] Вопрос по TCP 13.12.01 08:25  Число просмотров: 1219
Автор: Terrible Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> Недавно при работе с Windows Sockets сталкнулся с такой
> проблемой: определить статус соединения.
Цитата из MSDN
TCP States As a Winsock programmer, you are not required to know the actual TCP states
Так что средства для получения статуса соединения в Winsock скорее всего отсутствуют, по крайней мере я их не нашел.
Winsock - это более высокий уровень, а статус соединения есть у TCP.
<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.
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2026 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach