На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
  
    > не останавливается accept
      коллеги, всем привет
      у меня почему accept зацикливается.
      код:

      ExpandedWrap disabled
        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 раза одно и тоже соединение заакцептить, правильно?
      Сообщение отредактировано: Бобёр -
        что accept возвращает, если ошибку(INVALID_SOCKET(0)) смотри WSAGetLastError().
        что за клиент? В принципе нормальное действие клиента, после того как связь оборвалась, пытаться присоедениться еще раз
          сокет валидный и законный, WSAGetLastError() ничего не выдаёт :(
          клиент самописный, отправляет порцию данных и закрывается, следующик коннект через большой промежуток времени. т.е. теоретически (!) он даже акцепиться не должнет, т.к. его вообще (теоретически) нету

          Добавлено
          чего то какая то мистика.. в какой то момент всё заработало нормально, но вот опять... пипец. что то какой то день сегодня тяжёлый...
          Сообщение отредактировано: Бобёр -
            проверь sockaddr_in(айпи), который возвращает accept, хорошо бы отладчиком и там и там пройтись. По идее если accept срабатывает нормально, то значит кто то присоединяеться, осталось выяснить кто.
              вот блин засада! оказывается я случайно использовал тот номер порта, который использует какой то наш внутренний сетевой вирус (не спрашивайте мне зачем мне вирус, он очень полезный (для кого то, кроме меня) ), он то ко мне и коннектился.
              фуф, я уж думал что я рехнулся...
              Сообщение отредактировано: Бобёр -
              0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
              0 пользователей:


              Рейтинг@Mail.ru
              [ Script execution time: 0,0225 ]   [ 16 queries used ]   [ Generated: 27.04.24, 18:13 GMT ]