From: Felix Morgner Date: Thu, 1 May 2014 11:48:53 +0000 (+0200) Subject: Linux vs. BSD sockaddr_storage fix X-Git-Url: http://git.code-monkey.de/?p=umurmur.git;a=commitdiff_plain;h=1331f027db4be1f817027d855476fe56e26f14db Linux vs. BSD sockaddr_storage fix --- 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;