У меня есть сокет 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
,
Вы передаете указатель на SOCKADDR_IN
структура в качестве третьего аргумента inet_pton
, но если вы перейдете по ссылке на ссылку MSDN функции, вы увидите, что она хочет IN_ADDR
состав.
SOCKADDR_IN
структура имеет такой член, но это не первый член в структуре, поэтому вы получаете ошибку; Вы пишете адрес в неправильном месте в структуре, и адрес, на который вы пытаетесь отправить, не тот, который вы думаете.
Правильный вызов будет, например,
inet_pton(AF_INET, ip, &addr.sin_addr)