Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

проблемы с recv()

9.3K
30 марта 2005 года
maxrus
12 / / 28.02.2005
Стандартно:

WSAStartup(..)
socket(..)
bind(..)
recv(..)

А что если при выполнении bind()ему передается в параметрах ip-адрес активного адаптера, а при выполнении recv() адаптер этот н/р отключен т.е. ip-адрес не активен...
Конкретно: bind() выполняется у меня один раз при загрузке программы, а recv() считает трафик в цикле while все время. а что если например инет отключается (модем например перегрелся...), что же будет
recv() делать? у меня вся программа летит к черту - после включения модема она делает вид что работает а сама ничего не считает... Как быть?

выдержка из кода:
while (br != SOCKET_ERROR)
{
br=recv(soc,buf,PACKET_BUFFER_SIZE, 0);
printf("%u\n",br);
IPHeader* hdr = (IPHeader *)buf;
}
9.5K
01 апреля 2005 года
nikiforov
24 / / 21.03.2005
Цитата:
Originally posted by maxrus
Стандартно:

WSAStartup(..)
socket(..)
bind(..)
recv(..)

А что если при выполнении bind()ему передается в параметрах ip-адрес активного адаптера, а при выполнении recv() адаптер этот н/р отключен т.е. ip-адрес не активен...
Конкретно: bind() выполняется у меня один раз при загрузке программы, а recv() считает трафик в цикле while все время. а что если например инет отключается (модем например перегрелся...), что же будет
recv() делать? у меня вся программа летит к черту - после включения модема она делает вид что работает а сама ничего не считает... Как быть?

выдержка из кода:
while (br != SOCKET_ERROR)
{
br=recv(soc,buf,PACKET_BUFFER_SIZE, 0);
printf("%u\n",br);
IPHeader* hdr = (IPHeader *)buf;
}


Один из вариантов - использовать "non-blocked" socket и отслеживать таймаут. Это в случае, если recv() зависает.

9.3K
01 апреля 2005 года
maxrus
12 / / 28.02.2005
Цитата:
Originally posted by nikiforov
Один из вариантов - использовать "non-blocked" socket и отслеживать таймаут. Это в случае, если recv() зависает.


а с блокирующими сокетами никак? ведь он блокирует токо поток, а у меня и есть исчо основной поток...

9.5K
01 апреля 2005 года
nikiforov
24 / / 21.03.2005
Цитата:
Originally posted by maxrus
а с блокирующими сокетами никак? ведь он блокирует токо поток, а у меня и есть исчо основной поток...



Если проблема в блокировании, то можно использовать многопоточность.

В чем, конкретно, проблема ?

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог