Следующий код клиента пытается подготовиться к отправке дейтаграммы UDP.
Однако адрес не установлен должным образом, поэтому отправка никуда не идет.
Я получаю ошибку:
sendto: неверный или неполный многобайтовый или широкий символ
Я предполагаю, что речь идет об адресе, а не об отправляемых данных.
Кто-нибудь может определить проблему?
int sendSock; // socket for listening to other side (same for client and server)
struct sockaddr_in addr;
struct addrinfo* res = nullptr;
int initClient(const char hostname[], const char port[]) throw (Exception) {
struct addrinfo hints;
memset(&hints,0,sizeof(hints));
hints.ai_family=AF_UNSPEC;
hints.ai_socktype=SOCK_DGRAM;
hints.ai_protocol=0;
hints.ai_flags=AI_ADDRCONFIG;
int err = getaddrinfo(hostname, port, &hints, &res);
if (err != 0) {
throw Exception(__LINE__, "failed to resolve remote socket address");
}
sendSock = socket(res->ai_family, res->ai_socktype, res->ai_protocol);
if (sendSock < 0) {
throw Exception(__LINE__, strerror(errno));
}
struct hostent* hp = gethostbyname(hostname); // look up host name
if (hp == nullptr) {
throw Exception(__LINE__, "Can't find host");
}
}
вызов:
sendto(sendSock,buf,end, 0,res->ai_addr, res->ai_addrlen)
Вот объект addrinfo в отладчике:
p *res
$5 = {ai_flags = 0, ai_family = 23, ai_socktype = 2, ai_protocol = 0, ai_addrlen = 28, ai_canonname = 0x0,
ai_addr = 0x60003a660, ai_next = 0x60003a690}
p *res->ai_addr
$6 = {sa_family = 23, sa_data = "\023\210", '\000' <repeats 11 times>}
Мне не кажется, что там есть правильный адрес, но ни один из звонков по пути не проходит.
Задача ещё не решена.
Других решений пока нет …