diff --git a/main.c b/main.c index 0e2a0ee..5dc70db 100644 --- a/main.c +++ b/main.c @@ -106,6 +106,7 @@ int main(int argc, char *argv[]) { int sockfd; struct addrinfo hints, *res; struct sockaddr_storage dest_addr; // Declare dest_addr + int dest_addr_size; // Check if no arguments are given or if help is requested if (argc == 1 || (argc == 2 && strcmp(argv[1], "-h") == 0)) { @@ -175,6 +176,17 @@ int main(int argc, char *argv[]) { return 1; } + // Calculate dest_addr size + if (res->ai_family == AF_INET) { + dest_addr_size = sizeof(struct sockaddr_in); + } else if (res->ai_family == AF_INET6) { + dest_addr_size = sizeof(struct sockaddr_in6); + } else { + fprintf(stderr, "Unknown address family\n"); + freeaddrinfo(res); + return 1; + } + // Create UDP socket sockfd = socket(res->ai_family, SOCK_DGRAM, 0); if (sockfd == -1) { @@ -330,7 +342,7 @@ int main(int argc, char *argv[]) { memcpy(ptr, packet, header.caplen); // Send packet via UDP with TZSP encapsulation - if (sendto(sockfd, tzsp_packet, total_length, 0, (struct sockaddr *)&dest_addr, sizeof(dest_addr)) == -1) { + if (sendto(sockfd, tzsp_packet, total_length, 0, (struct sockaddr *)&dest_addr, dest_addr_size) == -1) { perror("sendto"); }