UNIXSocketに対応してないライブラリを無理矢理対応させる

プロトコルは同じなので、既にあるクライアントライブラリを使いたいのだけれど、そのクライアントライブラリが想定しているサーバーは、unixsocketには対応していない場合、クライアントライブラリにUnixSocketに対応させるpatchを送ってもacceptはされないでしょう。

とはいえ、patchを保持しつづけるのもしんどいので、うまくやれないかなーと思って作ってみた

https://github.com/walf443/unix_socket_hack

require 'unix_socket_hack'
UNIXSocketHack.apply({ 'unixsocket:9999' => '/path/to/unix.sock' })
sock = TCPSocket.new('unixsocket', 9999)
#=> UNIXSocket

# example using memcache-client.
require 'memcache'
memd = MemCache.new(['unixsocket:9999'])

unixsoket:9999へつなぎにいくと、UNIXSocketが返るようになるpatchをTCPSocketへ当てている。

もちろん、クライアントライブラリなどや、アプリケーションが実行する環境によっては相性が悪い可能性はありそうので、使わないにこしたことはないと思われる。