提问人:William John Holden 提问时间:10/3/2023 更新时间:10/3/2023 访问量:122
如何在 Linux 中调试 TCP 套接字创建?
How do you debug TCP socket creation in Linux?
问:
我正在为计算机网络的硕士项目开发一个特定于 Linux 的 Go 应用程序。我的应用程序快速将新的 IPv6 地址添加到 NIC,并从这些地址创建 TCP 套接字。此操作经常失败,但有时有效。当它失败时,Go 中的错误消息是模糊的。我看不出有什么用处.dmesg
strace
以下是相关代码的一部分:
src, err = net.ResolveTCPAddr("tcp6", net.JoinHostPort(address.IP.String(), "0"))
if err != nil {
return err
}
// (Some irrelevant lines omitted. I do not think that the tcp6/tcp mismatch is the problem.)
dst, err = net.ResolveTCPAddr("tcp", net.JoinHostPort(ip.String(), strconv.Itoa(port)))
if err != nil {
return err
}
server_conn, err := net.DialTCP("tcp", src, dst) // (This is where the problem happens.)
if err != nil {
return err
}
defer server_conn.Close()
Go 中的 in 如下所示:error
dial tcp [2001::xxxx]:0->[2a03:2880:f036:1d:face:b00c:0:3]:443: bind: cannot assign requested address
在哪里可以查找有关失败原因的更多详细信息?
我在 Internet 上发现了类似错误的讨论,其中其他应用程序指定了使用的源地址,但我还没有学到一个好的调试方法。DialTCP
bind
答: 暂无答案
评论
ip addr
iproute2
[2001::xxxx]
src
/sbin/sysctl net.ipv4.ip_local_port_range
ss state time-wait
errno
bind()
strace -e bind ...
EADDRINUSE