Unix-сокеты в relibc: connect перестал зависать и работает вне корневой ФС

25.07.2026

Две правки в relibc починили connect для unix-сокетов: вызов перестал зависать при относительном пути и стал работать для сокетов, созданных вне корневой файловой системы.

Зависание на относительном пути

Если программа создаёт unix-сокет, не указывая каталог, путь берётся относительно текущего рабочего каталога процесса. Такое поведение ожидаемо, и на других системах connect с таким путём просто работает. На Redox вызов не возвращался вообще: процесс висел, не получая ни ошибки, ни соединения.

Это опасный вид ошибки. Программа, которая рассчитывает на отказ или на успех, вместо этого просто останавливается — и диагностировать это по коду возврата невозможно.

Сокеты вне корневой файловой системы

Вторая правка касается абсолютных путей вида /scheme/имя/путь. Обработчик connect искал каталог сокета только среди схем корневой файловой системы, поэтому сокет, созданный в любой другой схеме, найти не удавалось. Соединение не устанавливалось.

На практике это ограничивало, например, программы, которые держат служебный сокет во временном каталоге.

Почему это касается Rust

В стандартной библиотеке Rust unix-сокеты — это UnixListener и UnixStream, путь передаётся как есть, без каких-либо преобразований. То есть обе ошибки воспроизводятся обычным кодом на Rust, без обходных путей. Исправления внесены в relibc, поэтому изменения получают и программы, собранные заново, и уже готовые бинарные файлы.

Оригинал

Коммиты Fix connect for Unix sockets outside the rootfs от 22 июля и Fix uds connect() relative path от 25 июля 2026 года в репозитории redox-os/relibc

Упоминаний: 1 · Просмотров: 2