Twonky
Twonky

Reputation: 806

Ruby application does not receive UDP packet from different host

Sending a UDP packet from Ruby client to Ruby server using the server address 192.168.1.30 works as expected, but only if client and server are on the same host. If the client runs on a different machine, the UDP packet finds its way to the server, but my server process won't notice.

Server:

require 'socket'
sock = UDPSocket.new()
sock.bind('', 8999)
p sock
while true do
    p sock.recvfrom(2000)
end
sock.close

Client:

require 'socket'
sock = UDPSocket.new
p sock.send("foo", 0, "192.168.1.30", 8999)
sock.close

After starting the server, netstat -n --udp --listen approves that the socket is open:

Proto Recv-Q Send-Q Local Address     Foreign Address         State      
udp        0      0 0.0.0.0:8999      0.0.0.0:*       

After running the client twice (on 192.168.1.30 and on .23), server output shows only one incoming packet, missing the one from 192.168.1.23:

#<UDPSocket:fd 7, AF_INET, 0.0.0.0, 8999>
["foo", ["AF_INET", 52187, "192.168.1.30", "192.168.1.30"]]

while Wireshark indicates that two packets were noticed

No  Time        Source          Destination     Proto Length Info
1   0.000000000 192.168.1.30    192.168.1.30    UDP   47     52187 → 8999 Len=3
2   2.804243569 192.168.1.23    192.168.1.30    UDP   62     39800 → 8999 Len=3

Which probably obvious detail am I missing?

Upvotes: 1

Views: 317

Answers (1)

Casper
Casper

Reputation: 34308

Check if you have any firewall rules active:

sudo iptables -L
sudo ufw status

Upvotes: 3

Related Questions