gen_tcp:recv/2
从一个被动模式的套接字接受一个数据包
用法:
recv(Socket, Length) -> {ok, Packet} | {error, Reason}
这个函数是从一个被动模式的套接字接受一个数据包。如果返回一个 {error, closed} 的返回值,那表明 Socket 已经关闭。
当 Socket 是 raw 模式下,参数 Length 才有意义的,并且 Length 表示接收字节的大小。如果 Length = 0,所有有效的字节数据都会被接收。如果 Length > 0,则只会接收 Length 长度的字节,或发生错误;当另一端 Socket 关闭时,接收的数据长度可能会小于 Length。
{Rand, _RandSeed} = random:uniform_s(9999, erlang:now()), Port = 40000 + Rand, case gen_tcp:listen(Port, [binary, {packet, 0}, {active, false}]) of {ok, ListenSocket} -> case gen_tcp:accept(ListenSocket) of {ok, Socket} -> gen_tcp:recv(Socket, 0); {error, SocketAcceptFail} -> SocketAcceptFail end; _ -> socket_listen_fail end.