Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sockets gen_tcp:recv/2返回错误,einval_Sockets_Tcp_Erlang_Otp_Gen Tcp - Fatal编程技术网

Sockets gen_tcp:recv/2返回错误,einval

Sockets gen_tcp:recv/2返回错误,einval,sockets,tcp,erlang,otp,gen-tcp,Sockets,Tcp,Erlang,Otp,Gen Tcp,我有一个客户端,它创建N个进程,所有进程都连接到服务器,如下所示: send(State = #state{low = Low, high = Low}) -> NewState = receive_sockets(0, Low, State), NewState; send(State = #state{low = Low}) -> N = Low rem 10, Dest = lists:nth(N + 1, State#state.dest), spa

我有一个客户端,它创建N个进程,所有进程都连接到服务器,如下所示:

 send(State = #state{low = Low, high = Low}) ->
 NewState = receive_sockets(0, Low, State),
 NewState;
 send(State = #state{low = Low}) ->
   N = Low rem 10,
   Dest = lists:nth(N + 1, State#state.dest),
   spawn(?MODULE, loop, [self(), Dest, Low]),
   NewState = State#state{low = 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}

此外,我在使用插座时是否存在任何问题,因为我观察到插座一经接受就会关闭

有没有关于原因的信息


感谢

默认gen_tcp:connect使用活动模式,除非在套接字的选项列表中指定了{active,false},在这种情况下,通过调用recv/2检索数据包。如果您确实希望使用gen_tcp:recv来处理数据,请使用{active,false}。请仔细检查“gen_tcp”手册页,尤其是活动模式相关手册页