2011-06-01 33 views
1

我寫了一個模塊,它有一個循環函數,函數會永遠發送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). 
+0

當一個進程不是該進程的「控制進程」時,關閉一個Socket非常困難。gen_udp和gen_tcp模塊可能有更多的信息。對於關閉它的進程,它必須是該Socket的控制進程。 – 2011-06-01 11:29:55

回答

2

有在這裏

  1. 認爲如果過程是 所有者東西兩socket.In可以 直接使用gen_udp這種情況下:關閉(襪子)。
  2. 如果進程不是套接字的所有者,則使用 gen_udp:controls_process(Sock,Pid) 其中Pid是套接字的新所有者的進程ID。現在你可以使用gen_udp: 從這個 進程關閉(Sock)。 http://www.erlang.org/doc/man/gen_udp.html
0

要終止一個進程可以

退出(PID,殺死)。

如果您有接收循環,則始終可以有一個關閉消息存在循環。

收到 shutdown->什麼也沒有。