本文簡要介紹ruby語言中  BasicSocket.recvmsg  的用法。
用法
recvmsg(maxmesglen=nil, flags=0, maxcontrollen=nil, opts={}) → [mesg, sender_addrinfo, rflags, *controls]recvmsg 使用 recvmsg(2) 係統調用以阻塞方式接收消息。
maxmesglen 是要接收的消息的最大長度。
flags 是 MSG_* 常量的按位或,例如 Socket::MSG_PEEK。
maxcontrollen 是要接收的控件(輔助數據)的最大長度。
opts 是選項哈希。目前 :scm_rights=>bool 是唯一的選擇。
:scm_rights 選項指定應用程序需要 SCM_RIGHTS 控製消息。如果該值為 nil 或 false,則應用程序不需要 SCM_RIGHTS 控製消息。在這種情況下,recvmsg 會立即關閉傳遞的文件說明符。這是默認行為。
如果 :scm_rights 值既不是 nil 也不是 false,應用程序需要 SCM_RIGHTS 控製消息。在這種情況下,recvmsg 為  Socket::AncillaryData#unix_rights  方法的每個文件說明符創建  IO  對象。
返回值為 4 元素數組。
mesg 是接收到的消息的字符串。
sender_addrinfo 是connection-less 套接字的發送方套接字地址。它是一個 Addrinfo  對象。對於 TCP 等 connection-oriented 套接字,sender_addrinfo 取決於平台。
rflags 是接收到的消息上的標誌,它是 MSG_* 常量的按位或,例如 Socket::MSG_TRUNC。如果係統使用 4.3BSD 風格的舊 recvmsg 係統調用,它將為零。
controls 是輔助數據,它是  Socket::AncillaryData  對象的數組,例如:
#<Socket::AncillaryData: AF_UNIX SOCKET RIGHTS 7>maxmesglen 和 maxcontrollen 可以為 nil。在這種情況下,緩衝區將不斷增長,直到消息未被截斷。在內部,使用MSG_PEEK。檢查緩衝區已滿和MSG_CTRUNC 是否被截斷。
recvmsg 可用於實現recv_io,如下所示:
mesg, sender_sockaddr, rflags, *controls = sock.recvmsg(:scm_rights=>true)
controls.each {|ancdata|
  if ancdata.cmsg_is?(:SOCKET, :RIGHTS)
    return ancdata.unix_rights[0]
  end
}相關用法
- Ruby BasicSocket.recv用法及代碼示例
- Ruby BasicSocket.recv_nonblock用法及代碼示例
- Ruby BasicSocket.remote_address用法及代碼示例
- Ruby BasicSocket.send用法及代碼示例
- Ruby BasicSocket.do_not_reverse_lookup用法及代碼示例
- Ruby BasicSocket.do_not_reverse_lookup =用法及代碼示例
- Ruby BasicSocket.connect_address用法及代碼示例
- Ruby BasicSocket.getsockopt用法及代碼示例
- Ruby BasicSocket.getpeereid用法及代碼示例
- Ruby BasicSocket.local_address用法及代碼示例
- Ruby BasicSocket.shutdown用法及代碼示例
- Ruby BasicSocket.close_read用法及代碼示例
- Ruby BasicSocket.getpeername用法及代碼示例
- Ruby BasicSocket.getsockname用法及代碼示例
- Ruby BasicSocket.sendmsg用法及代碼示例
- Ruby BasicSocket.close_write用法及代碼示例
- Ruby BasicSocket.setsockopt用法及代碼示例
- Ruby BasicSocket.for_fd用法及代碼示例
- Ruby BasicSpecification.require_paths用法及代碼示例
- Ruby BasicObject.equal?用法及代碼示例
- Ruby BasicObject.instance_eval用法及代碼示例
- Ruby BasicObject.obj ==用法及代碼示例
- Ruby BasicObject.method_missing用法及代碼示例
- Ruby BasicObject.singleton_method_undefined用法及代碼示例
- Ruby BasicObject.send用法及代碼示例
注:本文由純淨天空篩選整理自ruby-lang.org大神的英文原創作品 BasicSocket.recvmsg。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。
