有没有办法设置套接字选项来指示数据包到达哪个接口

时间:2013-05-27 09:39:30

标签: c unix network-programming

目前,这是我的困境。 我有2个fd:x和y。当写(x)发生时,它必须进入x-tunnel并且write(y)应该进入y-tunnel。我无法为每个连接创建路由规则(此处未提及的原因)

我接受连接时是否有可以设置的袜子选项,还是有其他方法可以设置?

谢谢

2 个答案:

答案 0 :(得分:0)

  • 您可以在x,y隧道的特定接口上控制sock绑定
  • 检查setsockopt
  • 中的SO_DONTROUTE选项

答案 1 :(得分:-1)

您的描述很粗略,我认为通过SO_REUSEADDR的optname和SO_REUSEPORT的setsockopt()可以帮助您,但我不确定。它不能“指示”数据包进入哪个接口,但您可以通过你的工具。

这里有一些关于Unix网络编程的参考资料,如果你想了解更多细节,你可以在第7.5章阅读它们和示例。

  

SO_REUSEADDR套接字选项有四个不同的用途:

     
      
  1. SO_REUSEADDR允许侦听服务器启动并绑定其众所周知的端口,   即使先前建立的连接存在使用此端口作为其本地   端口。
  2.   
  3. SO_REUSEADDR允许在与...相同的端口上启动新服务器   绑定到通配符地址的现有服务器,只要每个实例   绑定不同的本地IP地址。
  4.   
  5. SO_REUSEADDR允许单个进程将同一端口绑定到多个   套接字,只要每个绑定指定不同的本地IP地址。
  6.   
  7. SO_REUSEADDR允许完全重复绑定:绑定IP地址   和端口,当相同的IP地址和端口已经绑定到另一个   socket,如果传输协议支持它。通常支持此功能   仅适用于UDP套接字。
  8.