Index: pjproject/trunk/pjlib/include/pj/compat/socket.h
===================================================================
--- pjproject/trunk/pjlib/include/pj/compat/socket.h	(revision 2282)
+++ pjproject/trunk/pjlib/include/pj/compat/socket.h	(revision 2283)
@@ -54,5 +54,5 @@
  * it has built-in IPv6 support.
  */
-#if defined(_MSC_VER) && defined(PJ_HAS_IPV6) && PJ_HAS_IPV6!=0
+#if defined(_MSC_VER)
 #   ifndef s_addr
 #	define s_addr  S_un.S_addr
@@ -61,5 +61,5 @@
 #   include <ws2tcpip.h>
 
-#   ifndef IPPROTO_IPV6
+#   if !defined(IPPROTO_IPV6) && defined(PJ_HAS_IPV6) && PJ_HAS_IPV6!=0
 	/* Need to download and install IPv6Kit for this platform.
 	 * Please see the comments above about Visual Studio 6.
Index: pjproject/trunk/pjlib/include/pj/sock.h
===================================================================
--- pjproject/trunk/pjlib/include/pj/sock.h	(revision 2282)
+++ pjproject/trunk/pjlib/include/pj/sock.h	(revision 2283)
@@ -290,4 +290,19 @@
 extern const pj_uint16_t PJ_SO_SNDBUF;
 
+/** IP multicast interface. @see pj_IP_MULTICAST_IF() */
+extern const pj_uint16_t PJ_IP_MULTICAST_IF;
+ 
+/** IP multicast ttl. @see pj_IP_MULTICAST_TTL() */
+extern const pj_uint16_t PJ_IP_MULTICAST_TTL;
+
+/** IP multicast loopback. @see pj_IP_MULTICAST_LOOP() */
+extern const pj_uint16_t PJ_IP_MULTICAST_LOOP;
+
+/** Add an IP group membership. @see pj_IP_ADD_MEMBERSHIP() */
+extern const pj_uint16_t PJ_IP_ADD_MEMBERSHIP;
+
+/** Drop an IP group membership. @see pj_IP_DROP_MEMBERSHIP() */
+extern const pj_uint16_t PJ_IP_DROP_MEMBERSHIP;
+
 
 #if defined(PJ_DLL)
@@ -300,4 +315,19 @@
     /** Get #PJ_SO_SNDBUF constant */
     PJ_DECL(pj_uint16_t) pj_SO_SNDBUF(void);
+
+    /** Get #PJ_IP_MULTICAST_IF constant */
+    PJ_DECL(pj_uint16_t) pj_IP_MULTICAST_IF(void);
+
+    /** Get #PJ_IP_MULTICAST_TTL constant */
+    PJ_DECL(pj_uint16_t) pj_IP_MULTICAST_TTL(void);
+
+    /** Get #PJ_IP_MULTICAST_LOOP constant */
+    PJ_DECL(pj_uint16_t) pj_IP_MULTICAST_LOOP(void);
+
+    /** Get #PJ_IP_ADD_MEMBERSHIP constant */
+    PJ_DECL(pj_uint16_t) pj_IP_ADD_MEMBERSHIP(void);
+
+    /** Get #PJ_IP_DROP_MEMBERSHIP constant */
+    PJ_DECL(pj_uint16_t) pj_IP_DROP_MEMBERSHIP(void);
 #else
     /** Get #PJ_SO_TYPE constant */
@@ -309,4 +339,19 @@
     /** Get #PJ_SO_SNDBUF constant */
 #   define pj_SO_SNDBUF()   PJ_SO_SNDBUF
+
+    /** Get #PJ_IP_MULTICAST_IF constant */
+#   define pj_IP_MULTICAST_IF()    PJ_IP_MULTICAST_IF
+
+    /** Get #PJ_IP_MULTICAST_TTL constant */
+#   define pj_IP_MULTICAST_TTL()   PJ_IP_MULTICAST_TTL
+
+    /** Get #PJ_IP_MULTICAST_LOOP constant */
+#   define pj_IP_MULTICAST_LOOP()  PJ_IP_MULTICAST_LOOP
+
+    /** Get #PJ_IP_ADD_MEMBERSHIP constant */
+#   define pj_IP_ADD_MEMBERSHIP()  PJ_IP_ADD_MEMBERSHIP
+
+    /** Get #PJ_IP_DROP_MEMBERSHIP constant */
+#   define pj_IP_DROP_MEMBERSHIP() PJ_IP_DROP_MEMBERSHIP
 #endif
 
@@ -516,4 +561,13 @@
 
 
+/**
+ * This structure provides multicast group information for IPv4 addresses.
+ */
+typedef struct pj_ip_mreq {
+    pj_in_addr imr_multiaddr;	/**< IP multicast address of group. */
+    pj_in_addr imr_interface;	/**< local IP address of interface. */
+} pj_ip_mreq;
+
+
 /*****************************************************************************
  *
Index: pjproject/trunk/pjlib/src/pj/sock_bsd.c
===================================================================
--- pjproject/trunk/pjlib/src/pj/sock_bsd.c	(revision 2282)
+++ pjproject/trunk/pjlib/src/pj/sock_bsd.c	(revision 2283)
@@ -116,4 +116,9 @@
 const pj_uint16_t PJ_SO_RCVBUF  = SO_RCVBUF;
 const pj_uint16_t PJ_SO_SNDBUF  = SO_SNDBUF;
+const pj_uint16_t pj_IP_MULTICAST_IF    = IP_MULTICAST_IF;
+const pj_uint16_t pj_IP_MULTICAST_TTL   = IP_MULTICAST_TTL;
+const pj_uint16_t pj_IP_MULTICAST_LOOP  = IP_MULTICAST_LOOP;
+const pj_uint16_t pj_IP_ADD_MEMBERSHIP  = IP_ADD_MEMBERSHIP;
+const pj_uint16_t pj_IP_DROP_MEMBERSHIP = IP_DROP_MEMBERSHIP;
 
 
Index: pjproject/trunk/pjlib/src/pj/sock_common.c
===================================================================
--- pjproject/trunk/pjlib/src/pj/sock_common.c	(revision 2282)
+++ pjproject/trunk/pjlib/src/pj/sock_common.c	(revision 2283)
@@ -687,4 +687,29 @@
 }
 
+PJ_DEF(pj_uint16_t) pj_IP_MULTICAST_IF(void)
+{
+    return PJ_IP_MULTICAST_IF;
+}
+
+PJ_DEF(pj_uint16_t) pj_IP_MULTICAST_TTL(void)
+{
+    return PJ_IP_MULTICAST_TTL;
+}
+
+PJ_DEF(pj_uint16_t) pj_IP_MULTICAST_LOOP(void)
+{
+    return PJ_IP_MULTICAST_LOOP;
+}
+
+PJ_DEF(pj_uint16_t) pj_IP_ADD_MEMBERSHIP(void)
+{
+    return PJ_IP_ADD_MEMBERSHIP;
+}
+
+PJ_DEF(pj_uint16_t) pj_IP_DROP_MEMBERSHIP(void)
+{
+    return PJ_IP_DROP_MEMBERSHIP;
+}
+
 PJ_DEF(int) pj_MSG_OOB(void)
 {
Index: pjproject/trunk/pjlib/src/pj/sock_symbian.cpp
===================================================================
--- pjproject/trunk/pjlib/src/pj/sock_symbian.cpp	(revision 2282)
+++ pjproject/trunk/pjlib/src/pj/sock_symbian.cpp	(revision 2283)
@@ -65,4 +65,11 @@
 const pj_uint16_t PJ_SO_RCVBUF  = 0xFFFF;
 const pj_uint16_t PJ_SO_SNDBUF  = 0xFFFF;
+
+/* IP multicast is also not supported. */
+const pj_uint16_t pj_IP_MULTICAST_IF    = 0xFFFF;
+const pj_uint16_t pj_IP_MULTICAST_TTL   = 0xFFFF;
+const pj_uint16_t pj_IP_MULTICAST_LOOP  = 0xFFFF;
+const pj_uint16_t pj_IP_ADD_MEMBERSHIP  = 0xFFFF;
+const pj_uint16_t pj_IP_DROP_MEMBERSHIP = 0xFFFF;
 
 /* Flags */
