guile> (define s (socket PF_UNIX SOCK_STREAM 0)) guile> (bind s AF_UNIX "/tmp/s3") guile> (listen s 10) guile> (define thr (begin-thread (let loop () (write "zzz\n") (sleep 5) (loop))) ... ) "zzz "guile> guile> "zzz " guile> "zzz " guile> "zzz " guile> (accept s) ... <и тут больше сообщений не будет пока не пройдёт accept>
надо бы по больше severity
Вроде актуально :(
Причём не только для accept, но и для recv, send и всего комплекта функций работы с сокетами. А если копнуть чуть глубже, то выяснится, что всё, что умеет работать вместе с тредами, это операции с файловыми портами, usleep и sleep. Всё. Любая другая блокирующая операция заблокирует весь процесс целиком. Механизм для реализации обёрток в guile-1.6 есть. Делается всё довольно тривиально, если я правильно понял как это работает. Так что если это действительно необходимо, то я могу поправить accept и ещё немножко функций. :) Отправлять патч в upstream вряд ли имеет смысл, хотя я могу посмотреть на 1.8, может они так и забыли про эту "фичу". Ну что, исправляем?
даже и не знаю ... наверное можно подождать, вроде как уже свыкся со всеми тараканами 1.6 ... кстати как по твоим ощущениям 1.8 .. стоит ли туда переезжать? Или 1.9 дождаться?
1.8 не щупал, если честно. По рассылки особых возмущений не вижу. Либо guile уже никто не использует, либо там всё в порядке. в любом случае попробовать стоит. В 1.8 эти блокировки в accept убраны, в send и в recv остались. :) В общем, я патчик изготовлю и в пакет положу. Не будет у нас блокироваться accept, как и в 1.8. Остальные функции пока трогать не буду.
http://git.altlinux.org/people/voins/packages/?p=guile16.git;a=commit;h=100d7164c82e23cd029e500c9626da26a396a547 guile16-1.6.8-alt2