Функция обработчика событий Socket onread, onready, onclose в Ocaml

Я разрабатываю протокол с использованием сокета TCP/IP в Ocaml, и мне интересно реализовать подход, управляемый событиями. По сути, я хочу создать функции обработки событий, которые вызываются всякий раз, когда сокет получает новые данные, закрывается или открывается.

Можно ли сделать это в Ocaml без его реализации вручную с использованием нескольких потоков?

Спасибо,


person Jason    schedule 24.05.2013    source источник


Ответы (1)


Да. Создайте цикл и используйте Unix.select для ожидания событий на ваших fds. Вам нужно будет перевести сокеты в неблокирующий режим с помощью Unix.set_nonblock. так что ваши чтения и записи не блокируются, и вы можете вернуться к своему выбору, если нет данных для чтения/записи (потому что даже если select возвращает вам fds, доступные для чтения/записи, это не означает, что чтение/запись на они бы не блокировались).

person Daniel Bünzli    schedule 24.05.2013
comment
Не могли бы вы привести мне пример реализации этого? - person Jason; 24.05.2013
comment
Google говорит: mega-nerd.com/erikd/Blog/CodeHacking/ Окамл/ocaml_select.html - person Daniel Bünzli; 24.05.2013