проблемы с recv()
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;
}
Цитата:
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;
}
Стандартно:
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() зависает.
Цитата:
Originally posted by nikiforov
Один из вариантов - использовать "non-blocked" socket и отслеживать таймаут. Это в случае, если recv() зависает.
Один из вариантов - использовать "non-blocked" socket и отслеживать таймаут. Это в случае, если recv() зависает.
а с блокирующими сокетами никак? ведь он блокирует токо поток, а у меня и есть исчо основной поток...
Цитата:
Originally posted by maxrus
а с блокирующими сокетами никак? ведь он блокирует токо поток, а у меня и есть исчо основной поток...
а с блокирующими сокетами никак? ведь он блокирует токо поток, а у меня и есть исчо основной поток...
Если проблема в блокировании, то можно использовать многопоточность.
В чем, конкретно, проблема ?