【问题标题】:Handling IP address changes while socket is bound to interface在套接字绑定到接口时处理 IP 地址更改
【发布时间】:2014-07-17 14:00:35
【问题描述】:

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

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

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

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

【问题讨论】:

  • 在你的代码中启动socket之前你能得到eth0的ip吗?
  • 这个问题中最受好评的答案显示了如何使用 C:stackoverflow.com/questions/579783/… 中的 AF_NETLINK 套接字在 Linux 上监视地址更改

标签: python sockets networking


【解决方案1】:

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

  1. 轮询以获取您的接口的 IP,当它发生变化时重新启动您的服务器。

  2. 使用 netlink (man 7 netlink) 监听表明您的 IP 已更改的事件

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-02-12
    • 2012-06-15
    • 2013-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-03
    • 1970-01-01
    相关资源
    最近更新 更多