В программе Crystal, которая использует библиотеку C через FFI, у меня есть код, который блокируется при чтении из файлового дескриптора. Как я могу получить волокно, пока в этом дескрипторе файла не будет данных?
например. текущий код выглядит примерно так:
f = File.open("/some/socket/or/pipe/like/object")
Iterator.of do
data = Pointer(LibFoo::Data).malloc
# yield_until_fd_has_data f.fd
LibFoo.read f.fd, data
data.value
end
Где LibFoo.read
блокируется до тех пор, пока в объекте типа сокета / трубы не будет данных. Что я использую вместо yield_until_fd_has_data
?