add SO_REUSEPORT to export list in Socket.pm for better multicast support (resend)
[p5sagit/p5-mst-13.2.git] / ext / Socket / Socket.xs
index 336e6c4..0584e78 100644 (file)
@@ -1,3 +1,4 @@
+#define PERL_NO_GET_CONTEXT
 #include "EXTERN.h"
 #include "perl.h"
 #include "XSUB.h"
@@ -7,6 +8,9 @@
 #  include <sys/types.h>
 # endif
 # include <sys/socket.h>
+# if defined(USE_SOCKS) && defined(I_SOCKS)
+#   include <socks.h>
+# endif 
 # ifdef MPE
 #  define PF_INET AF_INET
 #  define PF_UNIX AF_UNIX
 # ifdef I_SYS_UN
 #  include <sys/un.h>
 # endif
+/* XXX Configure test for <netinet/in_systm.h needed XXX */
+# if defined(NeXT) || defined(__NeXT__)
+#  include <netinet/in_systm.h>
+# endif
 # ifdef I_NETINET_IN
 #  include <netinet/in.h>
 # endif
-# include <netdb.h>
+# ifdef I_NETDB
+#  include <netdb.h>
+# endif
 # ifdef I_ARPA_INET
 #  include <arpa/inet.h>
 # endif
@@ -63,6 +73,7 @@
 static int
 my_inet_aton(register const char *cp, struct in_addr *addr)
 {
+       dTHX;
        register U32 val;
        register int base;
        register char c;
@@ -655,6 +666,24 @@ constant(char *name, int arg)
 #else
            goto not_there;
 #endif
+       if (strEQ(name, "SHUT_RD"))
+#ifdef SHUT_RD
+           return SHUT_RD;
+#else
+           return 0;
+#endif
+       if (strEQ(name, "SHUT_RDWR"))
+#ifdef SHUT_RDWR
+           return SHUT_RDWR;
+#else
+           return 2;
+#endif
+       if (strEQ(name, "SHUT_WR"))
+#ifdef SHUT_WR
+           return SHUT_WR;
+#else
+           return 1;
+#endif
        if (strEQ(name, "SOCK_DGRAM"))
 #ifdef SOCK_DGRAM
            return SOCK_DGRAM;