WSAAsyncSelect и CloseSocket

Тема в разделе "WASM.NETWORKS", создана пользователем SnugForce, 2 май 2005.

  1. SnugForce

    SnugForce New Member

    Публикаций:
    0
    Регистрация:
    2 май 2005
    Сообщения:
    373
    Адрес:
    Из домУ
    Написал сервер на не блок сокетах TCP. Использую WSAAsyncSelect. Но вот проблемка есть. Если клиент не вызывает shutdown, а сразу CloseSocket, то сервер не отлавливает закрытие сокета и клиент как бы есть. Из-за чего и возникает море ошибок. Фактически сервер работает как пизанская башня.
     
  2. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    Надо FD_CLOSE ловить.
     
  3. SnugForce

    SnugForce New Member

    Публикаций:
    0
    Регистрация:
    2 май 2005
    Сообщения:
    373
    Адрес:
    Из домУ
    Забыл уточнить. Я на Дельфи пишу. Вот в этом-то и проблема, что сокет в FD_CLOSE не попадает....
     
  4. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    SnugForce

    В маску параметра event функции WSAAsyncSelect нужно добавить этот FD_CLOSE, а потом ловить. 100% работает.
     
  5. Avalonec

    Avalonec New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2004
    Сообщения:
    111
    Адрес:
    Тула
    FD_CLOSE не попадает....

    Что, как обычно, в дельфи сделали все наоборот? :)
     
  6. SnugForce

    SnugForce New Member

    Публикаций:
    0
    Регистрация:
    2 май 2005
    Сообщения:
    373
    Адрес:
    Из домУ
    Может не правильно выразился...

    Если клиент не вызывает shutdown, а сразу closeSocket, то сообщения FD_CLOSE НЕТ.

    Если клиент вызывает shutdown, а потом closeSocket, то все нормально попадает FD_CLOSE.