Actions
Feature #13713
closedsocketの便利メソッドのdatagramのUNIXSocket用対応
Status:
Rejected
Assignee:
-
Target version:
-
Description
https://docs.ruby-lang.org/ja/latest/class/Socket.html に
ソケットオブジェクトを生成する汎用的な方法として Socket.new がありますが、以下のようなより便利な メソッドがあります。
として
- TCP のクライアントソケット Socket.tcp TCPSocket.open
- TCP のサーバソケット Socket.tcp_server_loop, Socket.tcp_server_sockets, TCPServer.open
- UNIX socket のクライアントソケット Socket.unix UNIXSocket.open
- UNIX socket のサーバソケット Socket.unix_server_loop, Socket.unix_server_socket, UNIXServer.open
があげられていて、要約には書かれていませんが、UDP 用に udp_server_loop や udp_server_sockets もありますが、datagram の UNIXSocket は Socket.unix も UNIXSocket.open も対応していなくて、
https://gist.github.com/zimbatm/9f1bc26446af0ee3e5c5#gistcomment-1902920 にあるように
def notify_socket
@notify_socket ||= Socket.new(Socket::AF_UNIX, Socket::SOCK_DGRAM, 0).tap do |socket|
socket.connect(Socket.pack_sockaddr_un(ENV["NOTIFY_SOCKET"]))
socket.close_on_exec = true
end
end
のように Socket.new(:UNIX, :DGRAM) して pack_sockaddr_un して connect する必要があるようです。
datagram の UNIXSocket も Socket.unix(path, :DGRAM) や UNIXSocket.open(path, :DGRAM) という感じで簡単に書けるようにならないでししょうか?
それとも見つけられなかっただけで、すでに簡単な方法があるのでしょうか?
ユースケースとしては例としてあげたように systemd の Type=notify で使われているソケットへの送信があります。
Updated by akr (Akira Tanaka) over 6 years ago
- Status changed from Open to Feedback
こんな感じでどうですかね。
Addrinfo.unix(ENV["NOTIFY_SOCKET"], :DGRAM).connect
Updated by akr (Akira Tanaka) over 6 years ago
- Status changed from Feedback to Rejected
Actions
Like0
Like0Like0