2

RubyでUNIXソケットとSOCK_DGRAMを使用しようとしていますが、その方法を理解するのに非常に苦労しています。これまでのところ、私は次のようなことを試してきました:

sock_path = 'test.socket'
s1 = Socket.new(Socket::AF_UNIX, Socket::SOCK_DGRAM, 0)
s1.bind(Socket.pack_sockaddr_un(sock_path))

s2 = Socket.new(Socket::AF_UNIX, Socket::SOCK_DGRAM, 0)
s2.bind(Socket.pack_sockaddr_un(sock_path))

s1.send("HELLO")
s2.recv(5) # should equal "HELLO"

誰もこれを経験していますか?

4

1 に答える 1

3

一般的なケースでは、クライアントとサーバーの両方のソケットを使用する必要があるため、バインドには2つの異なるアドレスが必要connectですbind

require 'socket'

sock_path = 'test.socket'
sock_path2 = 'test2.socket'

s1 = Socket.new(Socket::AF_UNIX, Socket::SOCK_DGRAM, 0)
s1.bind(Socket.pack_sockaddr_un(sock_path))

s2 = Socket.new(Socket::AF_UNIX, Socket::SOCK_DGRAM, 0)
s2.bind(Socket.pack_sockaddr_un(sock_path2))
s2.connect(Socket.pack_sockaddr_un(sock_path))

s1.connect(Socket.pack_sockaddr_un(sock_path2))
s1.send("HELLO", 0)
puts s2.recv(5)

=> HELLO
于 2010-04-28T07:03:18.973 に答える