Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在套接字绑定到接口时处理IP地址更改_Python_Sockets_Networking - Fatal编程技术网

Python 在套接字绑定到接口时处理IP地址更改

Python 在套接字绑定到接口时处理IP地址更改,python,sockets,networking,Python,Sockets,Networking,在Linux上使用Python:我有一个TCPSocket服务器,我想在eth0上侦听它,而没有其他接口。如果eth0没有地址,则套接字根本不应该侦听 我可以绑定到与eth0关联的IP地址,但如果该地址更改,我的套接字将不再接收连接。似乎没有简单的方法接收IP地址更改通知 我可以轮询eth0的IP地址,并在其更改时将套接字绑定到新地址。有没有更好的方法来实现这一点 我探索了SO_BINDTODEVICE,但这需要root权限。正如您所说,您似乎有两种解决方案: 轮询以获取接口的IP,当服务器发生

在Linux上使用Python:我有一个TCPSocket服务器,我想在eth0上侦听它,而没有其他接口。如果eth0没有地址,则套接字根本不应该侦听

我可以绑定到与eth0关联的IP地址,但如果该地址更改,我的套接字将不再接收连接。似乎没有简单的方法接收IP地址更改通知

我可以轮询eth0的IP地址,并在其更改时将套接字绑定到新地址。有没有更好的方法来实现这一点


我探索了SO_BINDTODEVICE,但这需要root权限。

正如您所说,您似乎有两种解决方案:

  • 轮询以获取接口的IP,当服务器发生更改时重新启动服务器

  • 使用netlink(man 7 netlink)侦听指示您的IP已更改的事件


  • 通过在github上搜索(IPv4地址添加/删除事件),您可以找到使用netlink的代码示例。

    在代码中启动套接字之前,您可以获得eth0的ip吗?此问题中投票最多的答案显示了如何使用C中的AF_netlink套接字在Linux上监视地址更改: