代码之家  ›  专栏  ›  技术社区  ›  Aditya Sehgal

从IP地址和端口获取套接字FD

  •  1
  • Aditya Sehgal  · 技术社区  · 14 年前

    IP addr & port ? 我有一堆打开的UDP套接字,每个套接字都绑定到一个IP地址和端口。在某些情况下,应用程序充当前向应用程序。他们是a吗 getfdbyname 系统调用?

    1) A使用向C发送消息 source Port 2000 , destination port 3000 由C接收

    2) C则必须将此转发给 port 3000

    在步骤1,打开的套接字绑定到 接收消息。但是,在这一点上,我需要获得 FD 对于的套接字绑定 port 2000 转发消息。

    除了在所有配置的套接字上循环之外,还有什么想法吗?

    3 回复  |  直到 14 年前
        1
  •  3
  •   Borealid    14 年前

    您可以保留地址=>套接字映射的哈希。

    我通常使用由地址和套接字FD组成的struct,它表示我与之通信的主机。然后我有一个按地址查找结构的查找函数。

        2
  •  2
  •   mvds    14 年前

    你可以看看 strace netstat -anlp /proc/net/udp 要查找所有套接字的列表,请执行以下操作:

    sl  local_address rem_address   st tx_queue rx_queue tr tm->when retrnsmt   uid  timeout inode  
    53: 0100007F:0035 00000000:0000 07 00000000:00000000 00:00000000 00000000   103        0 11075 2 ffff1231230f90c0 
    

    这显示了“some process”如何在UDP端口53上侦听(对于慢速读取器,0x0035==53,0x0100007F是localhost)

    inode(11075)是到fd的链路。往里看 /proc/<bindpid>/fd/ 我们看到:

    ...
    lrwx------ 1 bind bind 64 2010-07-20 06:26 513 -> socket:[11075]
    ...
    

    所以fd是513。我不是建议你走这条路,但我认为这至少是获得你所要求的东西的一种方法。

        3
  •  1
  •   Nikolai Fetissov    14 年前

    sendto(3) 是为了(除非你真的 connect(2) 您的UDP套接字)。