Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум на Исходниках.RU > C/C++: Сетевое программирование > не останавливается accept


Автор: Бобёр 01.07.09, 07:10
коллеги, всем привет
у меня почему accept зацикливается.
код:

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    SOCKET servsocket = socket( PF_INET, SOCK_STREAM, IPPROTO_TCP ); //тут протоколы разные брал, не помогает
    if( servsocket == INVALID_SOCKET ) {
        CLogMessage::LogMessage( "Cannot create socket\n" );
    }
     
    SOCKADDR_IN socketaddr;
    socketaddr.sin_family = AF_INET;
    socketaddr.sin_addr.s_addr  = INADDR_ANY;
    socketaddr.sin_port = htons( portNumber );
     
    if( bind( servsocket, (LPSOCKADDR)&socketaddr, sizeof(socketaddr) ) == SOCKET_ERROR ) {
        CLogMessage::LogMessage( "Cannot bind socket\n" );
    }
     
    if( listen( servsocket, Backlog ) == SOCKET_ERROR ) {
        CLogMessage::LogMessage( "Cannot listen socket\n" );
    }
     
    SOCKET acceptedSocket = 0;
    while( true ) {
        SOCKADDR_IN descr;
        int new_len = sizeof(SOCKADDR_IN);;
        acceptedSocket = accept( servsocket, (SOCKADDR *)&descr, &new_len ); //по идее тут должен "подвисать" только однажды, однако нифига, второй проход опять откуда то берёт accept
     
           //приняли данные, закрыли сокет, правда в другом потоке, если это важно
          
     
          //
    }


всё дело происходит на локалхосте, может кто то подскажет чего я неправильно делаю? глаз замылился....
не можем же мы 2 раза одно и тоже соединение заакцептить, правильно?

Автор: popsa 01.07.09, 07:45
что accept возвращает, если ошибку(INVALID_SOCKET(0)) смотри WSAGetLastError().
что за клиент? В принципе нормальное действие клиента, после того как связь оборвалась, пытаться присоедениться еще раз

Автор: Бобёр 01.07.09, 07:56
сокет валидный и законный, WSAGetLastError() ничего не выдаёт :(
клиент самописный, отправляет порцию данных и закрывается, следующик коннект через большой промежуток времени. т.е. теоретически (!) он даже акцепиться не должнет, т.к. его вообще (теоретически) нету

Добавлено
чего то какая то мистика.. в какой то момент всё заработало нормально, но вот опять... пипец. что то какой то день сегодня тяжёлый...

Автор: popsa 01.07.09, 10:15
проверь sockaddr_in(айпи), который возвращает accept, хорошо бы отладчиком и там и там пройтись. По идее если accept срабатывает нормально, то значит кто то присоединяеться, осталось выяснить кто.

Автор: Бобёр 01.07.09, 11:58
вот блин засада! оказывается я случайно использовал тот номер порта, который использует какой то наш внутренний сетевой вирус (не спрашивайте мне зачем мне вирус, он очень полезный (для кого то, кроме меня) ), он то ко мне и коннектился.
фуф, я уж думал что я рехнулся...

Powered by Invision Power Board (https://www.invisionboard.com)
© Invision Power Services (https://www.invisionpower.com)