У меня есть приложение IOCP, которое хранит буфер размером 64 КБ для каждого контекста сокета. Он использует много оперативной памяти, обрабатывая тысячи сокетов. Вместо этого я хочу переключиться на модель, в которой у меня есть буфер размером 64 КБ на контекст iocp-потока (например, я могу сделать это в epoll и kqueue). Для этого мне нужно, чтобы мой порт завершения мог получать уведомления без копирования байтов в предоставленный WSABUF, а после уведомления просто вызывайте async WSARecvFrom (без предоставления перекрывающейся структуры, я использую udp для тестов), пока я не получу WSAEWOULDBLOCK. Я читал, что следующий метод может быть реализован, если я предоставлю пустой WSABUF (buf = NULL, len = 0) для вызова WSARecvFrom с перекрывающейся структурой. Но это не работает: IOCP никогда не «просыпается», так как буфер слишком мал.
Есть ли другие способы реализовать такой сценарий?