aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Peach <mrpeach@users.sourceforge.net>2010-07-18 23:24:23 +0000
committerMartin Peach <mrpeach@users.sourceforge.net>2010-07-18 23:24:23 +0000
commitd4d83ffdf3500990354da688eac349ebd20f33ce (patch)
treed39a629b66d70aed5657ca16ba1f9b82bc940543
parentd716dfe0b06dcdf21c16a107bc5426f1fececd96 (diff)
Fix ip_mreq stuff for MACOSX and _WIN32 (we hope...)
svn path=/trunk/externals/mrpeach/; revision=13723
-rw-r--r--net/udpreceive.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/net/udpreceive.c b/net/udpreceive.c
index 082e74a..5517001 100644
--- a/net/udpreceive.c
+++ b/net/udpreceive.c
@@ -101,8 +101,8 @@ static void *udpreceive_new(t_symbol *s, int argc, t_atom *argv)
t_udpreceive *x;
struct sockaddr_in server;
struct hostent *hp;
-#ifdef MACOSX
- struct ip_mreq mreq;
+#if defined MACOSX || defined _WIN32
+ struct ip_mreq mreq;
#else
struct ip_mreqn mreq;
#endif
@@ -170,9 +170,14 @@ static void *udpreceive_new(t_symbol *s, int argc, t_atom *argv)
/* hop count defaults to 1 so we won't leave the subnet*/
if (0xE0000000 == (ntohl(server.sin_addr.s_addr) & 0xF0000000))
{
+#if defined MACOSX || defined _WIN32
+ mreq.imr_multiaddr.s_addr = server.sin_addr.s_addr;
+ mreq.imr_interface.s_addr = INADDR_ANY;/* can put a specific local IP address here if host is multihomed */
+#else
mreq.imr_multiaddr.s_addr = server.sin_addr.s_addr;
mreq.imr_address.s_addr = INADDR_ANY;
mreq.imr_ifindex = 0;
+#endif //MACOSX || _WIN32
if (setsockopt(sockfd, IPPROTO_IP, IP_ADD_MEMBERSHIP,
(char *)&mreq, sizeof(mreq)) < 0)
error("udpreceive: setsockopt (IP_ADD_MEMBERSHIP) failed");
@@ -243,7 +248,7 @@ static void udpreceive_status(t_udpreceive *x)
static void udpreceive_set_multicast_ttl(t_udpreceive *x, t_floatarg ttl_hops)
{
int sockfd = x->x_connectsocket;
- unsigned int multicast_ttl = ttl_hops;
+ unsigned char multicast_ttl = ttl_hops;
unsigned int size;
if (setsockopt(sockfd, IPPROTO_IP, IP_MULTICAST_TTL,
@@ -256,7 +261,7 @@ static void udpreceive_set_multicast_ttl(t_udpreceive *x, t_floatarg ttl_hops)
static void udpreceive_set_multicast_loop(t_udpreceive *x, t_floatarg loop_state)
{
int sockfd = x->x_connectsocket;
- unsigned int multicast_loop_state = loop_state;
+ unsigned char multicast_loop_state = loop_state;
unsigned int size;