Linux vs. BSD sockaddr_storage fix
authorFelix Morgner <felix.morgner@gmail.com>
Thu, 1 May 2014 11:48:53 +0000 (13:48 +0200)
committerFelix Morgner <felix.morgner@gmail.com>
Thu, 1 May 2014 11:48:53 +0000 (13:48 +0200)
src/client.c
src/server.c

index 1c83de0018f6c6e36cf3dd738e96b7b0b8153998..d79fa78206bb2591f716aee2b97f30658d030db3 100644 (file)
@@ -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 {
index 953abe1b8970294aa957e9b4e15c9d440728e2a3..3afca49aeaee3c0c76e7556c60534597c0e3e8be 100644 (file)
@@ -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;