From 1331f027db4be1f817027d855476fe56e26f14db Mon Sep 17 00:00:00 2001 From: Felix Morgner Date: Thu, 1 May 2014 13:48:53 +0200 Subject: [PATCH] Linux vs. BSD sockaddr_storage fix --- src/client.c | 10 +++++----- src/server.c | 5 ++++- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/src/client.c b/src/client.c index 1c83de0..d79fa78 100644 --- a/src/client.c +++ b/src/client.c @@ -1046,11 +1046,11 @@ static int Client_send_udp(client_t *client, uint8_t *data, int len) CryptState_encrypt(&client->cryptState, data, buf, len); - // Maybe an OS X loopback quirk - if (client->remote_udp.ss_family == AF_INET) - sendto(udpsock, buf, len + 4, 0, (struct sockaddr *)&client->remote_udp, sizeof(struct sockaddr_in)); - else - sendto(udpsock, buf, len + 4, 0, (struct sockaddr *)&client->remote_udp, sizeof(struct sockaddr_in6)); +#if defined(NETBSD) || defined(FREEBSD) || defined(OPENBSD) || defined(__APPLE__) + sendto(udpsock, buf, len + 4, 0, (struct sockaddr *)&client->remote_udp, client->remote_tcp.ss_len); +#else + sendto(udpsock, buf, len + 4, 0, (struct sockaddr *)&client->remote_udp, sizeof(struct sockaddr_storage)); +#endif free(mbuf); } else { diff --git a/src/server.c b/src/server.c index 953abe1..3afca49 100644 --- a/src/server.c +++ b/src/server.c @@ -69,10 +69,13 @@ struct sockaddr_storage** Server_setupAddressesAndPorts() struct sockaddr_storage* v4address = calloc(1, sizeof(struct sockaddr_storage)); v4address->ss_family = AF_INET; - v4address->ss_len = sizeof(struct sockaddr_storage); struct sockaddr_storage* v6address = calloc(1, sizeof(struct sockaddr_storage)); v6address->ss_family = AF_INET6; + +#if defined(NETBSD) || defined(FREEBSD) || defined(OPENBSD) || defined(__APPLE__) + v4address->ss_len = sizeof(struct sockaddr_storage); v6address->ss_len = sizeof(struct sockaddr_storage); +#endif int error = 0; -- 2.30.2