Доступ к сокету из двух процессов - PullRequest
3 голосов
/ 04 сентября 2010

Разрешено ли иметь один процесс, читающий из, и другой процесс, записывающий в сокет в Erlang? Я попробовал это, и это, кажется, работает, но я хотел бы знать, является ли это надежным.

Ответы [ 3 ]

3 голосов
/ 05 сентября 2010

Как я понимаю из исходного кода, сокет send / recv (по крайней мере, gen_tcp) сводится к erlang: port_command для отправки и erlang: port_control для recv на порту сокета (см. Prim_inet.erl ).

Для port_command: «если порт занят, вызывающий процесс будет приостановлен до тех пор, пока порт больше не будет занят». Port_control также является синхронной операцией.

Поправьте меня, если я ошибаюсь, но было бы совершенно безопасно использовать несколько процессов для чтения и записи в сокет.

1 голос
/ 05 сентября 2010

Любой из них может написать, но это не имело бы смысла, если бы все ваши процессы могли получать. Это переполнило бы почтовые ящики всех тех, кто не ожидал сообщений. Вам нужно определить только один Pid для приема пакетов, по умолчанию это тот Pid, ​​в котором был создан сокет. Вы можете установить любой Pid для управления сокетом, задав процесс управления.

1 голос
/ 04 сентября 2010

Я почти уверен, что помню, как делал это без проблем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...