发送UDP数据包时"Invalid argument",但是哪个呢?

"Invalid argument" when sending UDP packet, but which?

本文关键字:argument 数据包 UDP Invalid 发送      更新时间:2023-10-16

我的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, "205551120 tc300Ny274B10*206H206367r25200200331'344272322362sD277312300232402242121620122", 55, 0, {sa_family=AF_INET, sin_port=htons(1510), sin_addr=inet_addr("219.132.100.190")}, 16) = -1 EINVAL (Invalid argument)

有人看到哪个参数无效吗?

应用程序最近已经移植到支持IPv6,但我不知道这是否有任何关系。

您将套接字绑定到本地地址127.1,但您正在发送到非本地主机地址。我需要检查一下,但也许EINVAL的意思是"您不能将127.1数据包发送到主机外"。