Ошибка сокета UDP 10049

У меня есть сокет UDP-сервера, который может принимать дейтаграммы от клиентов, но не может отправить ответ ни одному из них.

Это код, который я использую для отправки буфера:

    SOCKADDR_IN addr;
memset((char*)&addr, 0, sizeof(addr));

const char* ip = "127.0.0.1";
u_short port = 8888 // IP of the client to which the buffer is going to

if (inet_pton(AF_INET, ip, &addr) == 1)
{
addr.sin_family = AF_INET;
addr.sin_port = htons(port);

sendto(s, buffer, UDP_PACKET_SIZE, NULL, (SOCKADDR *)&addr, addrlen);
}

sendto() возвращает -1 и GetLastError() говорит 10049, что означает, что адрес не доступен. Я отправляю и получаю буфер на localhost,

1

Решение

Вы передаете указатель на SOCKADDR_IN структура в качестве третьего аргумента inet_pton, но если вы перейдете по ссылке на ссылку MSDN функции, вы увидите, что она хочет IN_ADDR состав.

SOCKADDR_IN структура имеет такой член, но это не первый член в структуре, поэтому вы получаете ошибку; Вы пишете адрес в неправильном месте в структуре, и адрес, на который вы пытаетесь отправить, не тот, который вы думаете.

Правильный вызов будет, например,

inet_pton(AF_INET, ip, &addr.sin_addr)
4

Другие решения


По вопросам рекламы [email protected]