«Неверный аргумент» при отправке UDP-пакета, но какой? - PullRequest
1 голос
/ 21 сентября 2011

Мое приложение 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, но я не знаю, имеет ли это какое-либо отношение к нему.

1 Ответ

1 голос
/ 21 сентября 2011

Вы связали свой сокет с локальным адресом 127.1, но отправляете на нелокальный адрес.Мне нужно проверить, но, возможно, EINVAL означает «вы не можете отправить 127.1 пакетов вне хоста».

...