информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Страшный баг в WindowsГде водятся OGRыЗа кого нас держат?
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Очередное исследование 19 миллиардов... 
 Оптимизация ввода-вывода как инструмент... 
 Зловреды выбирают Lisp и Delphi 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
если вы видите этот текст, отключите в настройках форума использование JavaScript
ФОРУМ
все доски
FAQ
IRC
новые сообщения
site updates
guestbook
beginners
sysadmin
programming
operating systems
theory
web building
software
hardware
networking
law
hacking
gadgets
job
dnet
humor
miscellaneous
scrap
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
[C++] Вопрос по TCP 11.12.01 01:31  Число просмотров: 1181
Автор: Korsh <Мельников Михаил> Статус: Elderman
<"чистая" ссылка>
> На сколько я смог разобраться на скорую руку это немного не
> то - там использование RAS, а у мне надо Windows Socket.
>
> > стоит заглянуть сюда: http://program.dax.ru последняя
> > рассылка был посвещена этой теме, правда там сделно на
> > дельфи, но переделать проблемы нет - тоже апи.
> >
> >
> > > Теперь собственно вопрос: как можно определить
> > состояние
> > > конкретного соединения (имея переменную SOCKET).
> > >
Если ты имеешь в виду этот сокет:
TServerWinsocket *Socket, то он даёт полную информацию о соединении,
читай хелп в Builder.
<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-2025 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach