sockets - 如何读取在 Golang 中接收到的 UDP 数据报的输入接口(interface)和远程套接字地址?

标签 sockets go udp

PacketConn.ReadFrom() 可以为输入接口(interface)提供包含 ifIndex 的 ControlMessage

UDPConn.ReadFromUDP() 返回带有数据报的源套接字地址 (srcIP+srcPort) 的 net.UDPAddr

但是,如何同时获取两个信息:输入接口(interface) ifIndex AND 远程套接字地址 (srcIP+srcPort)?

编辑:我已经填写了一个问题:https://github.com/golang/go/issues/14362

最佳答案

当底层套接字是 UDP 时,.ReadFrom() 返回一个 *net.UDPAddr 对象作为 net.Addr 结果。

因此 .ReadFrom() 可用于获取输入接口(interface)(如 ifIndex)和远程套接字完整端点地址(IPaddr+net.UDPAddr 中的端口)。

// c is *ipv4.PacketConn

n, cm, srcAddr, err := c.ReadFrom(buf)

switch srcAddr.(type) {
    case *net.UDPAddr:
        udpAddr := srcAddr.(*net.UDPAddr)
}

关于sockets - 如何读取在 Golang 中接收到的 UDP 数据报的输入接口(interface)和远程套接字地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35442824/

相关文章:

c - 在c中从UDP服务器上的Matlab Simulink接收二进制64位 float

.net - TCP/IP、UDP、Socket编程可以问的面试问题?

ruby-on-rails - 如何使用 Rails 通过 Web 套接字发送二进制文件

java - 在单独的线程中监听连接

java - 地址已被使用(绑定(bind)失败)

go - 在golang中创建后缀树

Golang 模板 : what is in the context?

正则表达式排除不适用于 inotifywait 的非 golang 文件

c - 使用 UNIX 流套接字的 IPC

java - UDP Code客户端服务器架构