Я пытаюсь создать обобщенную c функцию для отправки некоторых двоичных данных в где-то с использованием сокетов UDP. Поэтому char* destination
может иметь любую из следующих форм:
"ab c .d"
"a: b: c: d: e: f: g: h "
" example.com "
и char* data
может содержать '\ 0', но не гарантированно завершается нулем.
int sendData(const char* destination, uint16_t port, int socket, const char* data, uint32_t data_size)
{
struct sockaddr dest;
dest.sin_port = htons(port);
int sent_bytes = sendto(socket, data, data_size, 0, &dest, sizeof(sockaddr));
if (sent_bytes != data_size){
printf("failed to send packet (%d/%d)\n", sent_bytes, data_size);
perror("sendto");
return 1;
}
else {
return 0;
}
}
Но я не понимаю Не знаю, как превратить char* destination
в sockaddr
, и быстрый поиск моего вопроса дал только ответы для ipv4 или наоборот (преобразование sockaddr в строку, а это НЕ то, что я хочу). Я не уверен, что искать и где искать, и любая помощь будет высоко ценится.
Я видел, как люди упоминают "getaddrinfo" и "getnameinfo", но я не уверен, что это функции делают, и никто не публикует никаких примеров - они просто говорят «используйте это». Быстрый поиск, похоже, возвращает, что это не те функции, которые я ищу, потому что они возвращают struct addr_info
, который вы не можете поместить в сокет.