2010-04-27 3 views
1

J'essaie d'utiliser des sockets unix et SOCK_DGRAM dans ruby, mais j'ai vraiment du mal à trouver comment le faire. Jusqu'ici, j'ai essayé des choses comme ceci:ruby ​​socket dgram exemple

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" 

Quelqu'un a-t-il de l'expérience?

Répondre

2

En cas vous devez utiliser commune connect et bind pour les sockets client et serveur, vous devez donc deux adresses différentes pour la liaison

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 
Questions connexes