我的C ++应用程序将二进制数据作为UDP数据包发送。 sendto()调用返回EINVAL(无效参数),但我没有看到我传递的参数有任何问题。
我做了一个应用程序的一个部分,这里是重要的系统调用:
socket(PF_INET, SOCK_DGRAM, IPPROTO_IP) = 33
setsockopt(33, SOL_IP, IP_RECVERR, [1], 4) = 0
fcntl(33, F_SETFD, FD_CLOEXEC) = 0
bind(33, {sa_family=AF_INET, sin_port=htons(1510), sin_addr=inet_addr("127.0.0.1")}, 16) = 0
sendto(33, "\2055\5\0\0\0\1\0\0\0\1\20 \0t\0c\300Ny\274B\10*\206H\206\367\r\2\5\0\200\200\331'\344\272\322\362sD\277\312\300\23\240\224\212\16\20\1\0\0\22", 55, 0, {sa_family=AF_INET, sin_port=htons(1510), sin_addr=inet_addr("219.132.100.190")}, 16) = -1 EINVAL (Invalid argument)
有人看到哪个参数无效吗?
该应用程序最近被移植到支持IPv6,但我不知道这与它有什么关系。
答案 0 :(得分:1)
您将套接字绑定到本地地址127.1,但是您要发送到非本地主机地址。我需要检查,但也许EINVAL意味着“你不能在主机上发送127.1个数据包。”