Issue #13713 has been reported by znz (Kazuhiro NISHIYAMA).

----------------------------------------
Feature #13713: socketの便利メソッドのdatagramのUNIXSocket用対応
https://bugs.ruby-lang.org/issues/13713

* Author: znz (Kazuhiro NISHIYAMA)
* Status: Open
* Priority: Normal
* Assignee: 
* Target version: 
----------------------------------------
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)](https://docs.ruby-lang.org/en/2.4.0/Socket.html#method-c-new) して pack_sockaddr_un して connect する必要があるようです。

datagram の UNIXSocket も Socket.unix(path, :DGRAM) や UNIXSocket.open(path, :DGRAM) という感じで簡単に書けるようにならないでししょうか?
それとも見つけられなかっただけで、すでに簡単な方法があるのでしょうか?

ユースケースとしては例としてあげたように systemd の Type=notify で使われているソケットへの送信があります。



-- 
https://bugs.ruby-lang.org/