sendmsg(mesg, flags=0, dest_sockaddr=nil, *controls) -> Integer
[permalink][rdoc][edit]-
sendmsg(2) を用いてメッセージを送ります。
このメソッドはブロックします。ノンブロッキング方式で通信したい場合は BasicSocket#sendmsg_nonblock を用います。
ソケットが connection-less の場合は dest_sockaddr で通信先のアドレスを指定しなければなりません。Socket.sockaddr_in の返り値や Addrinfo オブジェクトを引数として渡すことができます。
controls には 補助データ(ancillary data)を渡します。 Socket::AncillaryData のインスタンスや 3要素(cmsg_level, cmsg_type, cmsg_data) の配列を用いることができます。
送ったバイト数を返します。
# UnixSocket#send_io の実装例 # use Socket::AncillaryData. require 'socket' ancdata = Socket::AncillaryData.int(:UNIX, :SOCKET, :RIGHTS, io.fileno) sock.sendmsg("a", 0, nil, ancdata) # use 3-element array. ancdata = [:SOCKET, :RIGHTS, [io.fileno].pack("i!")] sock.sendmsg("\0", 0, nil, ancdata)
- [PARAM] mesg:
- メッセージ文字列
- [PARAM] flags:
- フラグ(Socket::MSG_* という定数の bitwise OR を取ったもの)
- [PARAM] dest_sockaddr:
- 通信先のアドレス
- [PARAM] controls:
- 補助データの配列
[SEE_ALSO] BasicSocket#sendmsg_nonblock