當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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}。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。