【发布时间】:2019-06-28 14:11:15
【问题描述】:
我有侦听 Ip:Port 的 TCP 服务器。
listen(Ip, Port) ->
Opts = [
binary,
{active, false},
{packet, 0},
{reuseaddr, true},
{ip, Ip}
],
case gen_tcp:listen(Port, Opts) of
{ok, ListenSock} ->
?MODULE:loop_accept(ListenSock);
{error, Reason} ->
exit(Reason)
end.
loop_accept(ListenSock) ->
{ok, Sock} = gen_tcp:accept(ListenSock),
?MODULE:loop(Sock),
?MODULE:loop_accept(ListenSock).
loop(Sock) ->
case gen_tcp:recv(Sock, 0) of
{ok, Data} ->
gen_tcp:send(Sock, [<<"Response: ">>, Data]),
?MODULE:loop(Sock);
{error, Reason} ->
ok
end.
任务:当一个客户端连接到 Ip:Port(例如telnet Ip Port)时,必须断开另一个尝试连接的客户端。换句话说,独占使用 Ip:Port。
问题:
- 如何在 Erlang 上使用 gen_tcp 模块实现?
- 可以通过 gen_tcp:listen 的选项解决吗?
- 如何在 Erlang 中以编程方式放弃尝试连接?
附:我是 erlang 的新手。
【问题讨论】:
标签: tcp erlang tcplistener gen-tcp