Пометить дескриптор файла канала как недоступный для записи в Linux - PullRequest
3 голосов
/ 11 мая 2019

Я работаю над библиотекой для создания IPC на основе сокета UNIX в Linux.Цель состоит в том, чтобы скрыть логику IPC в библиотеке, и я использую поток, который обрабатывает сокет для внешней связи.

Поскольку я хочу мультиплексировать / демультиплексировать данные, поступающие извне, во внутренние потоки нескольких устройств чтения / записи, яЯ использую каналы для связи между этим потоком управления и другими.

Теперь я хотел бы также управлять видом QoS и, таким образом, хотел бы блокировать некоторые пользовательские потоки в направлении записи, когда я знаю, что с другой стороны не осталось места (другой процесс IPC читает данныеот меня слишком медленно например).

Чтобы уведомить внутренний пользовательский поток, что для отправки данных не осталось места (в его «виртуальном канале»), я хотел бы отметить его канал передачи как недоступный для записи, тогда этот поток может использовать, например, select для этогоотправка дескриптора файла канала.

Мой вопрос: существует ли способ пометить дескриптор файла записи канала как недоступный для записи , даже если во внутреннем буфере все еще есть свободное место, и пометить его как доступный для записи снова, когда мойпоток управления решает это? Помня о том, что событие состояния записи должно быть в состоянии управляться такими функциями, как select, poll и т. Д.

PS: я знаю, что есть много библиотек, которые могут помочь мне сделатьта же самая работа легче, чем ZeroMQ или nanomsg, но они слишком тяжелы для того, чего я хотел бы достичь.

...