gen_tcp:recv/3
从一个被动模式的套接字接受一个数据包
用法:
recv(Socket, Length, Timeout) -> {ok, Packet} | {error, Reason}
这个函数是从一个被动模式的套接字接受一个数据包。如果返回一个 {error, closed} 的返回值,那表明 Socket 已经关闭。
当 Socket 是 raw 模式下,参数 Length 才有意义的,并且 Length 表示接收字节的大小。如果 Length = 0,所有有效的字节数据都会被接收。如果 Length > 0,则只会接收 Length 长度的字节,或发生错误;当另一端 Socket 关闭时,接收的数据长度可能会小于 Length。
选项 Timeout 是一个以毫秒为单位的超时值,默认值是 infinity。
{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, 5000);
{error, SocketAcceptFail} ->
SocketAcceptFail
end;
_ ->
socket_listen_fail
end.