有什么方法可以从 Erlang 中的套接字读取整行,还是我需要在上面手动实现行缓冲gen_tcp:recv
?
问问题
768 次
2 回答
7
您是否尝试过使用
inet:setopts(Socket, [{packet, line}])
见:http ://www.erlang.org/doc/man/inet.html#setopts-2
干杯!
于 2012-06-20T12:06:25.680 回答
1
无需自己实现行缓冲。
gen_tcp:listen/2
接受{packet, line}
它的Options
参数,这将使套接字进入行模式,因此调用gen_tcp:recv
将阻塞,直到读取了完整的行。
gen_tcp:listen(Port, [{packet, line}])
确保通过{buffer, Size}
相同调用(或inet:setopts/2
)的选项设置的缓冲区大小足够大以适合所有行,否则它们将被截断。
或者,如果使用 Elixir,这应该可以帮助您入门:
:gen_tcp.listen(port, [packet: :line, buffer: 1024])
于 2017-08-20T15:13:23.253 回答