5

有什么方法可以从 Erlang 中的套接字读取整行,还是我需要在上面手动实现行缓冲gen_tcp:recv

4

2 回答 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 回答