目前,这是我的困境。我有 2 个 fd:x 和 y。当 write(x) 发生时,它必须去 x-tunnel,而 write(y) 应该去 y-tunnel。我无法为每个连接创建路由规则(此处未提及的原因)
当我接受连接时,我可以设置一个 sock opt 还是有其他方法可以做到这一点?
谢谢
目前,这是我的困境。我有 2 个 fd:x 和 y。当 write(x) 发生时,它必须去 x-tunnel,而 write(y) 应该去 y-tunnel。我无法为每个连接创建路由规则(此处未提及的原因)
当我接受连接时,我可以设置一个 sock opt 还是有其他方法可以做到这一点?
谢谢
您的描述很粗略,我认为 SO_REUSEADDR 和 SO_REUSEPORT 的 optname 的 setsockopt() 可能会对您有所帮助,但我不确定。它不能“指示”数据包进入哪个接口,但您可以通过您的工具来指示它们。
这里有一些关于 Unix 网络编程的参考资料,如果你想了解更多细节,可以阅读第 7.5 章中的它们和示例。
SO_REUSEADDR 套接字选项有四种不同的用途:
- SO_REUSEADDR 允许侦听服务器启动并绑定其众所周知的端口,即使存在使用此端口作为其本地端口的先前建立的连接。
- SO_REUSEADDR 允许在与绑定到通配符地址的现有服务器相同的端口上启动新服务器,只要每个实例绑定不同的本地 IP 地址。
- SO_REUSEADDR 允许单个进程将同一个端口绑定到多个套接字,只要每个绑定指定不同的本地 IP 地址。
- SO_REUSEADDR 允许完全重复的绑定:IP 地址和端口的绑定,当相同的 IP 地址和端口已经绑定到另一个套接字时,如果传输协议支持它。通常仅 UDP 套接字支持此功能。