Всем привет! Необходимо реализовать следующее: Я добавил сокет к порту CreateIoCompletionPort(socket,m_hPort,ULONG(key),0); и допустим на сокете не происходит ни каких операций в течении определенного времени timeout. Вопрос: Как закрыть этот сокет? Закрытие соединения со стороны клиента у меня выглядит как результат GetQueuedCompletionStatus в котором *lpNumberOfBytes == 0, т.е. какбудто мне пришло или я отправил 0 байт, и я уничтожаю сокет. Проблему с закрытием сокета по истечении timeout я хотел решить так: на отдельном потоке с интервалом I перебирать все сокеты, и посылать пакет PostQueuedCompletionStatus(hPort,0,key,0) тем, на которых в течении timeout не было ни каких операций(к каждому сокету я прилагаю структуру, в которой храню время последней операции). Но возникает проблема когда сокет обрабатывается на одном потоке, а на другом приходит сообщение о его уничтожении. Можно конечно сгородить что-нибудь из мютексов, но подсказывает мне внутренний голос, что все гораздо проще...
Если два потока обращаются к одним и тем же структурам данных, то советую что-нить "сгородить" из мьютексов Потом всё равно всплывёт.