2
我想通過telnet發送一個很長的字符串到我的應用程序。套接字問題:如何接收超過3,160個字符的字符串?
在我的應用,我設置了一個插座,帶:
{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) ->
接收並處理進來的來自發件人的消息。
最初,我只能發送一個大約1,500個字符的字符串,然後我添加了setopts/2命令來增加緩衝區大小。但我無法處理超過3,160位字符的插槽。
我已通過getopts打印出值,並驗證它們是在setopts/2調用中表示的值。
我可以利用我的HTTP接口發表文章的字符串值,至少4倍,並通過遠程登錄/插座客戶端可以得到他們...
我缺少什麼?
從一個活動的套接字開始,然後如果一行包含我的終止符是合法的,我很好;但是如果它不切換到被動模式並且recv/2我的其餘數據? – Jr0
@ Jr0:是的,這是一種方法。您可以重複'{active,once}','receive'循環。 –
如果它們長於接收緩衝區,將不會激活一次導致截斷的行嗎? – Jr0