Erlang中文手册(Erldoc.com)  »  gen_tcp  »  accept/2
Erlang并发编程 Erlang/OTP设计原理 Erlang/OTP[pdf] Mnesia用户手册[pdf] Erlang完整手册[en] 官网手册[en] 模块列表 方法列表 随机 Erlang中文社区(BBS) 美女图库

gen_tcp:accept/2

接受一个发送到监听套接字 ListenSocket 上的连接请求

用法:

accept(ListenSocket, Timeout) -> {ok, Socket} | {error, Reason}

接受一个发送到监听套接字 ListenSocket 上的连接请求。ListenSocket 必须是由函数 gen_tcp:listen/2 建立返回。Timeout 是一个毫秒级的超时值,默认为infinity。

该函数会引起进程阻塞,直到有一个连接请求发送到监听的套接字,或是超过监听接受时间。

如果连接已建立,则返回 {ok,Socket};或如果 ListenSocket 已经关闭,则返回{error,closed};或如果在指定的时间内连接没有建立,则返回{error,timeout};或如果 Erlang 虚拟机里可用的端口都被使用了,则返回 {error, system_limit};如果某些东西出错,也可能返回一个 POSIX 错误。一些有可能的错误请查看 inet 模块的相关说明。

使用 gen_tcp:send/2 向该函数返回的套接字 Socket 发送数据包。往端口发送的数据包会以下面格式的消息发送:

{tcp, Socket, Data}

如果在建立套接字 Socket 的时候选项列表中指定了 {active,false},这样就只能使用 gen_tcp:recv/2gen_tcp:recv/3 来接收数据包了。

{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, 1500) of
            {ok, Socket} ->
                Socket;
            {error, SocketAcceptFail} ->
                SocketAcceptFail
        end;
    _ ->
        socket_listen_fail
end.
阿里云 - 最高1000元通用代金券立即可用
沪ICP备13037221号-9