当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


erlang accept(ListenSocket, Timeout :: nowait)用法及代码示例


accept(ListenSocket, Timeout :: nowait) ->
          {ok, Socket} |
          {select, SelectInfo} |
          {completion, CompletionInfo} |
          {error, Reason}
OTP 22.1
accept(ListenSocket,
       Handle :: select_handle() | completion_handle()) ->
          {ok, Socket} |
          {select, SelectInfo} |
          {completion, CompletionInfo} |
          {error, Reason}
OTP 24.0
类型:
ListenSocket = Socket = socket()
SelectInfo = select_info()
CompletionInfo = completion_info()
Reason = 
 posix() |
    closed |
 invalid() |
    {create_accept_socket, posix()} |
    {add_socket, posix()} |
    {update_accept_context, posix()}

接受/1但很快就返回了。

当没有待返回的连接时,该函数将返回(onUnix){select, SelectInfo}或(在Windows){completion, CompletionInfo},当客户端连接时,调用者稍后将收到以下消息之一(取决于平台):


select message

{'$socket', Socket, select, SelectHandle}(与SelectHandle包含在SelectInfo)。

随后对 accept/1,2 的调用将返回套接字。


completion message

{'$socket', Socket, completion, {CompletionHandle, CompletionStatus}}(与CompletionHandle包含在CompletionInfo)。

接受的结果将在 CompletionStatus 中。

如果 time-out 参数是 Handle ,则该术语将包含在返回的 SelectInfoCompletionInfo 以及相应的选择或完成消息中。 Handle 被认为对于该调用是唯一的。

如果 time-out 参数是 nowait

On Unix

还有一个SelectInfo返回时,它将包含一个select_handle()由调用生成。

On Windows

还有一个CompletionInfo返回时,它将包含一个completion_handle()由调用生成。

如果调用者不想等待连接,则必须立即调用cancel/2取消操作。

注意

在 unix 上,请注意,如果进行多次调用,则只有最后一个调用是"valid":

{select, {select_info, _Handle1}} = socket:accept(LSock, nowait),
	    {select, {select_info, _Handle2}} = socket:accept(LSock, nowait),
	    receive
	        {'$socket', LSock, select, Handle2} ->
	             {ok, ASock} = socket:accept(LSock, nowait),
	             . 
                     .
	             .
	    end

在上面的示例中,一旦进行第二次(接受)调用,只有 Handle2 有效(第一次调用自动为 "cancelled",并在进行第二次调用时发送中止消息)。

相关用法


注:本文由纯净天空筛选整理自erlang.org大神的英文原创作品 accept(ListenSocket, Timeout :: nowait) -> {ok, Socket} | {select, SelectInfo} | {completion, CompletionInfo} | {error, Reason}。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。