рубиновый сокет dgram пример

Я пытаюсь использовать сокеты 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"

У кого-либо есть опыт с этим?

1
задан Bub Bradlee 27 April 2010 в 22:56
поделиться

1 ответ

В общем случае вам нужно использовать 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
2
ответ дан 3 September 2019 в 00:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: