#erlang
#erlang
Вопрос:
Я пишу один модуль, в котором есть одна функция цикла, функция будет отправлять udp-пакет вечно. я отлаживаю программу в консоли erlang, я хочу знать, как закрыть сокет UDP? иначе erlang всегда будет выводить сообщение отладки в консоль. Спасибо!
start() ->
{ok, Sock} = gen_udp:open(0, []),
send(Sock).
send(Sock) ->
gen_udp:send(Sock, "127.0.0.1", 3211, "hello world"),
timer:sleep(5000),
send(Sock).
Комментарии:
1. довольно сложно закрыть сокет, когда процесс не является «управляющим процессом» этого сокета. Модули gen_udp и gen_tcp могут содержать дополнительную информацию. Чтобы процесс закрыл его, он должен быть управляющим процессом этого сокета.
Ответ №1:
Здесь следует учитывать две вещи
- Если процесс является владельцем сокета.В этом случае вы можете напрямую использовать gen_udp:close(Sock).
- Если процесс не является владельцем сокета, тогда используйте gen_udp:controlling_process(Sock,Pid), где Pid — это идентификатор процесса нового владельца сокета. Теперь вы можете использовать gen_udp:close (Sock) из этого процесса. http://www.erlang.org/doc/man/gen_udp.html
Ответ №2:
Чтобы завершить процесс, вы можете
выход (Pid, kill).
если у вас есть цикл приема, вы всегда можете получить сообщение о завершении работы, которое существует в цикле.
получить завершение работы -> ничего.