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