информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Сетевые кракеры и правда о деле ЛевинаСтрашный баг в WindowsЗа кого нас держат?
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Бэкдор в xz/liblzma, предназначенный... 
 Три миллиона электронных замков... 
 Doom на газонокосилках 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
С UDP все ясно, TCP в том-то и дело?!@ 27.10.01 22:08  Число просмотров: 874
Автор: ggg <ggg> Статус: Elderman
<"чистая" ссылка>
наверно это особенность маздайной реализации
типа если законнектиться невозможно, то и не зачем ждать приложению
а что говорит getsockopt(SO_ERROR) ?
<programming>
Fd_connect 27.10.01 11:22  
Автор: Heromantor Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Что-то я не пойму когда посылается это сообщение или что-то там еще. Если я сделаю WSAEventSelect(s,events,FD_CONNECT) а потом connect то если я не порублен к инету то ОНО все равно устанавливается независимо от того сконектился я или нет, в принципе для этого я давно уже пользую FD_WRITE но интересно узнать что-же такое с FD_CONNECT?

Прошу прощения за каламбур
Fd_connect 27.10.01 14:02  
Автор: Лamo Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Всё очень просто,
делаешь сокет,
создаёшь событие - WSAEVENT hEvent = WSACreateEvent
потом вызывай всаэвентселект -
WSAEventSelect(sock, hEvent, FD_READ | FD_WRITE | FD_CONNECT | FD_CLOSE);
потом коннектся - connect,
потом залупливай бесконечный луп и жди событий
while(1)
{
DWORD dwRet = WSAWaitForMultipleEvents(1, &hEvent, FALSE, 5000, FALSE);
5000 - это время таймаута ожидания или коннекта или send или recv
if(dwRet == WSA_WAIT_TIMEOUT)
{
MessageBox("timeout!", "", 0);
break;
}
потом вызывай -
WSANETWORKEVENTS events;
WSAEnumNetworkEvents(sock, hEvent, &events);
потом смари чо за события у тебя -
if(events.lNetworkEvents & FD_CONNECT)
{
сдесь мы сконнектились, и можно уже слать или принимать данные, в зависимости от того что те надо, например есл ты конектися на хттп, то те сдесь надо отправлять запрос, если смтп то принимать ответ 220
}
if(events.lNetworkEvents & FD_READ)
{
сюда попадёшь если сокет готов к передачи данных
}
if(events.lNetworkEvents & FD_WRITE)
{
сдесь к приёму данных
}
if(events.lNetworkEvents & FD_CLOSE)
{
событие закрытия сокета
}
}

в конце закрывай сокет - closesoket
и события - WSACloseEvent

И если надо, не забудь выходить из лупа брейком
Это-то я знаю, проблема в другом. 27.10.01 14:40  
Автор: Heromantor Статус: Незарегистрированный пользователь
<"чистая" ссылка>
А проблема в том-что, если я делаю WSAEventSelect на одно событие FD_CONNECT, и пускаю прогу, то устанавливаеться event низависимо от того законектился я или нет, причем WaitForMultipleObjects вылетает сразу и не ждет тайм-аута т.е. event усатанавливается сразу после connect? Че это такое и почему на хрен мне вызыватьenumесли это не надо т.к. до конекта никакие события с сокетом происходить не могут!
Это-то я знаю, проблема в другом. 27.10.01 15:15  
Автор: Лamo Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Чо то я не понял что ты хочешь,
Кароче, для чего нужен FD_CONNECT - Фишка в том,
что када ты вызываешь WSAEventSelect
то какимто образом сокет переходит в не блокирующее состояние, и connect выполняется практически всегда,
и уже дальше, если соединение установлено, то как раз срабатывает событие FD_CONNECT значащее то, что сокет готов к приёму или передаче данных,
а если, к примеру, не возможно поключица на данный хост с некоторым портом, - ну порт закрыт,
то срабатывает таймаут, и событие FD_CONNECT не происходит
Дело в том... 27.10.01 16:16  
Автор: Heromantor Статус: Незарегистрированный пользователь
<"чистая" ссылка>
если соединение установлено, то как раз
> срабатывает событие FD_CONNECT значащее то, что сокет готов
> к приёму или передаче данных,
> а если, к примеру, не возможно поключица на данный хост с
> некоторым портом, - ну порт закрыт,
> то срабатывает таймаут, и событие FD_CONNECT не происходит

Во-во! так и должно быть, но если я не подрублен к инету в настоящий момент то событие все равно устанавливается в signaled, причем моментально после connect?! Вот в чем проблема-то!
Дело в том... 28.10.01 10:48  
Автор: Лamo Статус: Незарегистрированный пользователь
<"чистая" ссылка>
ХаХаХа :)) ну ты даёшь!!!
если ты не подрублен к инету,
то вопервых gethostbyname будет возвращать NULL,
значащее то, что соединения с инетом нету или хост не доступен, а терь подумай что будет если ты дальше будешь юзать указатель на HOSTENT == NULL :)))
а сокет какой ? UDP или TCP ? 27.10.01 17:23  
Автор: ggg <ggg> Статус: Elderman
<"чистая" ссылка>
С UDP все ясно, TCP в том-то и дело?!@ 27.10.01 18:44  
Автор: Heromantor Статус: Незарегистрированный пользователь
<"чистая" ссылка>
С UDP все ясно, TCP в том-то и дело?!@ 27.10.01 22:08  
Автор: ggg <ggg> Статус: Elderman
<"чистая" ссылка>
наверно это особенность маздайной реализации
типа если законнектиться невозможно, то и не зачем ждать приложению
а что говорит getsockopt(SO_ERROR) ?
1




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


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