В настоящее время я пишу прокси-приложение, которое читает из одного сокета и пишет в другом. Оба они настроены как неблокирующие, что позволяет обрабатывать несколько пар сокетов.
Чтобы управлять правильным потоком между сокетами, приложение НЕ должно читать из исходного сокета, если запись в целевой сокет может блокироваться.
Идея хорошая, однако я не нашел способа обнаружить состояние блокировки целевого сокета без предварительной записи в него ... и это не то, что нужно.
Мне известен вариант использования SIOCOUTQ
(с использованием ioctl()
) и вычисления оставшегося буфера, но это выглядит некрасиво по сравнению с простой проверкой готовности целевого сокета к записи.
Полагаю, я также могу использовать select()
только для этого сокета, но это такая большая трата такого тяжелого системного вызова.