ping时strace输出中connect()上的EINVAL

我正在做简单的ping 192.168.205.206,可以看到一个痕迹:

...
socket(PF_INET,SOCK_DGRAM,IPPROTO_IP) = 4
connect(4,{sa_family=AF_INET,sin_port=htons(1025),sin_addr=inet_addr("192.168.205.206")},16) = -1 EINVAL (Invalid argument)
...

无论我何时ping 192.168.205.127,strace都是:

...
socket(PF_INET,sin_addr=inet_addr("192.168.205.127")},16) = 0
...

似乎在connect()系统调用中发生了奇怪的事情。

在此主机上,路由表和网络设置非常复杂。

当我做ip r get 192.168.205.206时,strace是:

...
socket(PF_NETLINK,SOCK_RAW|SOCK_CLOEXEC,NETLINK_ROUTE) = 3
setsockopt(3,SOL_SOCKET,SO_snDBUF,[32768],4) = 0
setsockopt(3,SO_RCVBUF,[1048576],SOL_NETLINK,11,[1],4)  = 0
bind(3,{sa_family=AF_NETLINK,pid=0,groups=00000000},12) = 0
getsockname(3,pid=26471,[12]) = 0
sendmsg(3,{msg_name(12)={sa_family=AF_NETLINK,msg_iov(1)=[{"$\0\0\0\32\0\1\0\311m*^\0\0\0\0\2 \0\0\0\0\0\0\0\20\0\0\10\0\1\0"...,36}],msg_controllen=0,msg_flags=0},0) = 36
recvmsg(3,msg_iov(1)=[{"8\0\0\0\2\0\0\0\311m*^gg\0\0\352\377\377\377$\0\0\0\32\0\1\0\311m*^"...,32768}],0) = 56
write(2,"RTNETLINK answers: Invalid argum"...,36RTNETLINK answers: Invalid argument
...

ip r get 192.168.205.127的痕迹:

...
socket(PF_NETLINK,pid=3070,msg_iov(1)=[{"$\0\0\0\32\0\1\0\ro*^\0\0\0\0\2 \0\0\0\0\0\0\0\20\0\0\10\0\1\0"...,msg_iov(1)=[{"p\0\0\0\30\0\0\0\ro*^\376\v\0\0\2 \0\0\376\0\0\1\0\2\0\0\10\0\17\0"...,0) = 112
...
write(1,"192.168.205.127 via 169.254.0.1 "...,71192.168.205.127 via 169.254.0.1 dev bond0.33 src 100.10.1.2 uid 0 
) = 71

...

Invalid argument的原因是什么?如何从输出中理解或通过执行其他步骤(可能是读取内核源代码)来理解它?

guyuetie 回答:ping时strace输出中connect()上的EINVAL

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/2720696.html

大家都在问