Сервер на портах завершения

Тема в разделе "WASM.NETWORKS", создана пользователем samba, 6 апр 2007.

  1. samba

    samba New Member

    Публикаций:
    0
    Регистрация:
    24 авг 2003
    Сообщения:
    65
    Адрес:
    England
    Всем привет!

    Необходимо реализовать следующее:

    Я добавил сокет к порту
    CreateIoCompletionPort(socket,m_hPort,ULONG(key),0);
    и допустим на сокете не происходит ни каких операций в течении определенного времени timeout.
    Вопрос: Как закрыть этот сокет?

    Закрытие соединения со стороны клиента у меня выглядит как результат GetQueuedCompletionStatus в котором *lpNumberOfBytes == 0, т.е. какбудто мне пришло или я отправил 0 байт, и я уничтожаю сокет.

    Проблему с закрытием сокета по истечении timeout я хотел решить так:
    на отдельном потоке с интервалом I перебирать все сокеты, и посылать пакет PostQueuedCompletionStatus(hPort,0,key,0) тем, на которых в течении timeout не было ни каких операций(к каждому сокету я прилагаю структуру, в которой храню время последней операции). Но возникает проблема когда сокет обрабатывается на одном потоке, а на другом приходит сообщение о его уничтожении. Можно конечно сгородить что-нибудь из мютексов, но подсказывает мне внутренний голос, что все гораздо проще...
     
  2. nester7

    nester7 New Member

    Публикаций:
    0
    Регистрация:
    5 дек 2003
    Сообщения:
    720
    Адрес:
    Russia
    Если два потока обращаются к одним и тем же структурам данных,
    то советую что-нить "сгородить" из мьютексов :)
    Потом всё равно всплывёт.