我正在尝试在 linux 的不同网络接口上的 ruby 应用程序中打开多个套接字。例如,假设我有 IP 为 192.168.1.2 的接口 eth0 和 IP 地址为 10.0.0.2 的接口 wlan0。我想同时连接到每个接口上都有一个套接字的服务器。我认为绑定到这些接口的 IP 地址会起作用,但似乎并非如此。在wireshark中,当我绑定到wlan0的IP时,我成功地看到SYN数据包使用正确的源IP发送,但是wireshark在eth0上看到它们并且套接字永远不会打开。
Ruby 版本:ruby 1.9.3p194(2012-04-20 修订版 35410)[x86_64-linux]
这是我当前的代码。我还尝试了 ruby-doc 页面上记录的 Socket 的 Addrinfo 方法,结果相同。
require 'socket'
ip = "192.168.1.2" # IP of internal interface
port = 8000
server = "" # IP of the server I'm trying to connect to goes here
lhost = Socket.pack_sockaddr_in(0, ip)
rhost = Socket.pack_sockaddr_in(port, server)
socket = Socket.new(Socket::AF_INET, Socket::SOCK_STREAM, 0)
socket.bind(lhost)
socket.connect(rhost)
感谢您的任何帮助!