我已经实现了一个通过tcp套接字发送和接收数据的服务。现在我的机器上有两个网络接口,我应该通过两个网络运行服务。
如何指定发送数据的网络接口? (使用Boost :: asio或传统的Berkeley套接字,或使用系统调用来动态更改内核的路由表)
答案 0 :(得分:0)
我不了解Boost,但一般情况下,如果您想使用特定接口发送/ recv,而不是bind()
该接口的IP地址的套接字,或者在某些平台上,您可以使用setsockopt(SOL_SOCKET, SO_BINDTODEVICE)
代替。
答案 1 :(得分:0)
您是否尝试过此操作,创建一个套接字绑定到 0.0.0.0 以接收来自所有接口的数据包。然后为每个接口创建一个套接字用于发送数据包。这里的关键是设置 REUSEADDRSS 选项,以便发送套接字可以绑定到每个接口的地址并共享一个接收数据包的相同端口。
如果您正在处理 TCP,已建立的连接将准备绑定到特定接口。您将无法通过其他接口发送到该连接。