我正在尝试通过telnet将长字符串发送到我的应用程序。
在我的应用程序中,我设置了一个套接字:
{ok, Sock} = gen_tcp:listen(Port, [{active, true}, {reuseaddr, true}],
{ok, Sock} = gen_tcp:accpet(Sock),
% start a process when someone connects
{ok, Pid} = my_sup:start_handler(Sock),
inet:setopts(Socket,[{active, once},{buffer, 2310731}, {recbuf, 1310731},{sndbuf, 1310731}]),
gen_tcp:controlling_process(Socket, Pid),
我处理连接客户端的进程是gen_server,我使用标准
handle_info ({tcp, Sock, Data}, State) ->
接收并处理来自发件人的incomming消息。
最初,我只能发送一个大约1,500个字符的字符串,然后我添加了setopts / 2命令来增加缓冲区大小。但我无法让套接字处理超过3,160个字符。
我已通过getopts打印出这些值,并验证它们是setopts / 2调用中所代表的内容。
我可以利用我的http接口POST字符串值至少4倍,并且可以通过telnet / socket客户端获取 ...
我错过了什么?
答案 0 :(得分:0)
如果您未指定packet
或line
选项,则只会收到一个TCP数据包发送的内容。因此,如果您想要获得更多,您必须编写我们自己的接收循环和协议。其他数据只是在缓冲区中等待,但您还没有收集它们。