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

      сервак на ноуте. клиент на компе.
      если запускаю один клиент то все работает идеально.
      стоит запустить второй как он ( второй клиент ) начинает безбожно глючить:
      по логам сервера ответный пакет был отослан, но клиент его не принимает ( и из-за этого висит так как ждет когда сервак ответит )
      висеть может долго, но стоит закрыть первый клиент как пакет чудесным образом приходит во второй клиент.

      причем подвиснуть может или на первой передачи клиент<->сервер или на второй или вообще на 7й
      но 100% рано или поздно зависнет в ожидании пакета и дождется только, повторюсь, после закрытия первого клиента.


      вот сижу и чешу репу - где же накосячил я в архитектуре и как оно так вот вышло.

      ЗЫ само собой в ситуации когда оба клиента запускаются на разных компах все ок. но мне жутко неудобно тестить так (((
      фаерволы и антивирусы были первыми подозреваемыми и отключены - пофих.


      прием пакета работает так:
      ExpandedWrap disabled
        WSAEVENT hEventObject = ::CreateEvent( NULL, FALSE, FALSE, L"FD_READ | FD_CLOSE " );
        int succ = WSAEventSelect( sock, hEventObject, FD_READ | FD_CLOSE  );
        if( SOCKET_ERROR == succ )
        {
            pgLog::error( "SocketCtrl::socketReceiveTread() FAILED to WSAEventSelect. Error=%d", WSAGetLastError());
            return -1;
        }
        WSAEVENT mEvents[2] = { hEventObject, NULL };

      ExpandedWrap disabled
        for(;;)
        {
            DWORD notify = WSAWaitForMultipleEvents( 1, mEvents, TRUE, WSA_INFINITE, FALSE );
        //далее обработка
        }
        [CODE=cpp]
      Сообщение отредактировано: progman -
        Ммм, вопрос мож глупый, но TCP или UDP?
          усе - разобрался.
          имя уникалоьное должно быть у эвента.
          ExpandedWrap disabled
                wchar_t eventname[ MAX_PATH ] = { 0 };
                swprintf_s( eventname, MAX_PATH, L"FD_READ_FD_CLOSE_%d", ::GetTickCount() );
             
                WSAEVENT hEventObject = ::CreateEvent( NULL, FALSE, FALSE, eventname );
                int succ = WSAEventSelect( sock, hEventObject, FD_READ | FD_CLOSE  );


          как часики швейцарские все заработало
            А может просто не надо было неразделяемый между процессами эвент делать именованным?
              Цитата Adil @
              А может просто не надо было неразделяемый между процессами эвент делать именованным?

              угу. Старая дурацкая привычка именовать эвенты :-?
              1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
              0 пользователей:


              Рейтинг@Mail.ru
              [ Script execution time: 0,0226 ]   [ 15 queries used ]   [ Generated: 7.07.25, 14:53 GMT ]