Модераторы: feodorv
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ассинхронными сокетами и WSAEvent, нет обработки событий 
:(
    Опции темы
dvamaster
Дата 16.8.2007, 06:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 559
Регистрация: 30.6.2004
Где: Россия : Курган

Репутация: нет
Всего: 10



Доброго времени суток!!!

У меня проблема с ассинхронными сокетами.

WaitForSingleObject реагирует только на FD_ACCEPT.

Можете подсказать что сделать?

Вот код

Код

SOCKET sockListen;
sockaddr_in addrListen;
WSAEVENT wsaEvent;
WSANETWORKEVENTS wsaNWE;

int _tmain(int argc, _TCHAR* argv[])
{
    WSADATA wsaData;
    u_long iNonBlockMode = 1;

    int iRet = WSAStartup(MAKEWORD(2, 2), &wsaData);
    if (iRet != 0)
        return -1;
    sockListen = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    if (sockListen == INVALID_SOCKET) {
        WSACleanup();
        return -1;
    }
    memset(&addrListen, 0, sizeof(addrListen));
    addrListen.sin_addr.s_addr = INADDR_ANY;
    addrListen.sin_family = AF_INET;
    addrListen.sin_port = htons(9876);
    iRet = bind(sockListen, (struct sockaddr*)&addrListen, sizeof(addrListen));
    wsaEvent = WSACreateEvent();
    iRet = listen(sockListen, 5);
    iRet = ioctlsocket(sockListen, FIONBIO, &iNonBlockMode);
    iRet = WSAEventSelect(sockListen, wsaEvent, FD_ALL_EVENTS);
    DWORD waitRet = 0;
    bool bRunLoop = true;
    while (bRunLoop) {
        waitRet = WaitForSingleObject(wsaEvent, WSA_INFINITE);
        if (waitRet == WSA_WAIT_TIMEOUT)
            break;
        if (waitRet != WSA_WAIT_EVENT_0)
            break;
        WSAEnumNetworkEvents(sockListen, wsaEvent, &wsaNWE);
        switch (wsaNWE.lNetworkEvents) {
            case FD_ACCEPT:
                break;
            case FD_READ:
                break;
            case FD_CLOSE:
                bRunLoop = false;
                break;
        }
        WSAResetEvent(wsaEvent);
    }
    WSACloseEvent(wsaEvent);
    iNonBlockMode = 0;
    iRet = ioctlsocket(sockListen, FIONBIO, &iNonBlockMode);
    WSACleanup();
    return 0;
}



--------------------
Хорошую информацию трудно добыть. Сделать с ней что-нибудь - еще труднее. /L. Skywalker/

Что же я сделал не так? /Король Лир/

Я делаю это для твоего же блага! /Любой родитель и палач/

PKUNZIP.ZIP /неизвестный/
PM MAIL WWW ICQ   Вверх
ptr
Дата 16.8.2007, 11:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 661
Регистрация: 31.5.2006
Где: Новосибирск

Репутация: 9
Всего: 14



А что ты ещё хочешь получить? Ведь ты ничего больше не делаешь, только прослушиваешь порт.


--------------------
Единственный способ определить границы возможного - это выйти за эти границы, в невозможное.
Артур Кларк.
PM MAIL ICQ   Вверх
dumb
Дата 16.8.2007, 12:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 1
Всего: 158



Цитата(dvamaster @  16.8.2007,  06:33 Найти цитируемый пост)
Можете подсказать что сделать?

accept'нуть входящее соединение?
PM MAIL   Вверх
dvamaster
Дата 16.8.2007, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 559
Регистрация: 30.6.2004
Где: Россия : Курган

Репутация: нет
Всего: 10



Кусок из DRKB3

Код

var
fevent : thandle;
//Создаем серверный сокет
...
feventclose := wsacreateevent;
wsaeventselect(socket,fevent, fd_close + fd_read );
repeat
waitforsingleobject(fevent,infinite);
wsaenumnetworkevents(fsocket,fevent,@ni);
case ni.lnetworkevents of
fd_close:break;
fd_read: begin
receivedata;
end;
end;
wsaresetevent(feventclose);
until false;
wsacloseevent(feventclose);


мне казалось, надо что-то другое сделать с Accept`ом? что правла не знаю, подскажите.


--------------------
Хорошую информацию трудно добыть. Сделать с ней что-нибудь - еще труднее. /L. Skywalker/

Что же я сделал не так? /Король Лир/

Я делаю это для твоего же блага! /Любой родитель и палач/

PKUNZIP.ZIP /неизвестный/
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0717 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.