1
我的C++應用程序正在發送二進制數據作爲UDP數據包。 sendto()調用返回EINVAL(無效參數),但我沒有看到我傳遞的參數有什麼問題。發送UDP數據包時發生「無效參數」,但是哪一個?
我做了應用程序的使用strace這裏是revelant系統調用:
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,但我不知道這與它有什麼關係。
您的路由表是否包含到該地址的有效路由?什麼是你的系統上的'sizeof(sockaddr_in)'? –
@Ben:是的,有一個有效的路線,16是sockaddr_in的正確長度。 –
綁定到127.0.0.1可能綁定到'lo'。 219.132.100.190很可能不是一個有效的數據發送地址'lo' – PlasmaHH