处理套接字绑定到接口时的IP地址更改
在Linux上使用Python:我有一个TCPSocket服务器,我希望它只在eth0这个网络接口上监听,不想在其他接口上监听。如果eth0没有地址,那个socket就不应该监听。
我可以绑定到eth0关联的IP地址,但如果这个地址发生变化,我的socket就无法再接收连接了。似乎没有简单的方法可以接收到IP地址变化的通知。
我可以定期检查eth0的IP地址,当它变化时再把socket绑定到新的地址。有没有更好的实现方法呢?
我研究过SO_BINDTODEVICE这个选项,但它需要管理员权限。
1 个回答
0
看起来你有两个解决方案,正如你所说的:
定期检查你的网络接口的IP地址,当它变化时重启你的服务器。
使用netlink监听IP地址变化的事件(可以查看man 7 netlink了解更多)。
你可以在GitHub上搜索RTMGRP_IPV4_IFADDR(这是关于IPv4地址添加/删除事件的代码示例)来找到使用netlink的代码示例。