
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.52] |
![]() |
|
Сообщ.
#1
,
|
|
|
ситуация такая - тестирую клиент-сервер
сервак на ноуте. клиент на компе. если запускаю один клиент то все работает идеально. стоит запустить второй как он ( второй клиент ) начинает безбожно глючить: по логам сервера ответный пакет был отослан, но клиент его не принимает ( и из-за этого висит так как ждет когда сервак ответит ) висеть может долго, но стоит закрыть первый клиент как пакет чудесным образом приходит во второй клиент. причем подвиснуть может или на первой передачи клиент<->сервер или на второй или вообще на 7й но 100% рано или поздно зависнет в ожидании пакета и дождется только, повторюсь, после закрытия первого клиента. вот сижу и чешу репу - где же накосячил я в архитектуре и как оно так вот вышло. ЗЫ само собой в ситуации когда оба клиента запускаются на разных компах все ок. но мне жутко неудобно тестить так ((( фаерволы и антивирусы были первыми подозреваемыми и отключены - пофих. прием пакета работает так: ![]() ![]() 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 }; ![]() ![]() for(;;) { DWORD notify = WSAWaitForMultipleEvents( 1, mEvents, TRUE, WSA_INFINITE, FALSE ); //далее обработка } [CODE=cpp] |
Сообщ.
#2
,
|
|
|
Ммм, вопрос мож глупый, но TCP или UDP?
|
Сообщ.
#3
,
|
|
|
усе - разобрался.
имя уникалоьное должно быть у эвента. ![]() ![]() 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 ); как часики швейцарские все заработало |
Сообщ.
#4
,
|
|
|
А может просто не надо было неразделяемый между процессами эвент делать именованным?
|
Сообщ.
#5
,
|
|
|
Цитата Adil @ А может просто не надо было неразделяемый между процессами эвент делать именованным? угу. Старая дурацкая привычка именовать эвенты ![]() |