gen_tcp:recv/2 返回错误,einval
Posted
技术标签:
【中文标题】gen_tcp:recv/2 返回错误,einval【英文标题】:gen_tcp:recv/2 returns error, einval 【发布时间】:2016-08-01 04:44:30 【问题描述】:我有一个客户端,它创建 N 个进程并全部连接到这样的服务器:
send(State = #statelow = Low, high = Low) ->
NewState = receive_sockets(0, Low, State),
NewState;
send(State = #statelow = Low) ->
N = Low rem 10,
Dest = lists:nth(N + 1, State#state.dest),
spawn(?MODULE, loop, [self(), Dest, Low]),
NewState = State#statelow = Low + 1,
send(NewState).
loop(From, IP, Port, Low) ->
case gen_tcp:connect(IP, Port, [binary]) of
ok, Socket ->
gen_tcp:send(Socket, integer_to_binary(Low)),
From ! Low, Socket,
loop1(Socket);
%%timer:sleep(infinity);
_Else ->
io:format("The connection failed ~n"),
loop(From, IP, Port, Low)
end.
loop1(Socket) ->
case gen_tcp:recv(Socket, 0) of
ok, Data ->
io:format("Received ~n ~p", [Data]),
loop1(Socket);
error, einval ->
io:format("error ~n")
end.
我正在创建许多客户端连接。稍后,服务器可能会向我发送一些数据,所以我正在使用 gen_tcp:recv/2 等待,但我收到 error, einval。
此外,我在使用套接字时是否有任何问题,因为我观察到套接字一旦被接受就会被关闭。
关于为什么的任何输入?
谢谢
【问题讨论】:
【参考方案1】:默认 gen_tcp:connect 使用主动模式,除非在套接字的选项列表中指定 active, false,在这种情况下通过调用 recv/2 检索数据包。如果您真的想使用 gen_tcp:recv 来处理数据,请使用 active, false。请仔细检查“gen_tcp”的手册页,尤其是活动模式相关的手册页。
【讨论】:
以上是关于gen_tcp:recv/2 返回错误,einval的主要内容,如果未能解决你的问题,请参考以下文章
远程服务器返回错误: 404错误远程服务器返回错误:500错误 HttpWebResponse远程服务器返回错误:(404500) 错误。
Post 请求WCF接口报:远程服务器返回错误: (415)
PhpStorm 错误?错误的返回类型:预期用户,返回 Laravel 存储库中的 Eloquest\Model|object