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的主要内容,如果未能解决你的问题,请参考以下文章

welink返回错误码-11

远程服务器返回错误: 404错误远程服务器返回错误:500错误 HttpWebResponse远程服务器返回错误:(404500) 错误。

Post 请求WCF接口报:远程服务器返回错误: (415)

下载失败,服务器返回的配置格式错误

SQL查询时错误:子查询返回的值多于一个

PhpStorm 错误?错误的返回类型:预期用户,返回 Laravel 存储库中的 Eloquest\Model|object