Message info
 
To:calendarserver-changes@lists.macosforge.org From:source_changes@macosforge.org Subject:[CalendarServer-changes] [8949] CalendarServer/trunk Date:Thu, 29 Mar 2012 00:35:02 -0700 (PDT)
 

Revision
8949
Author
glyph@apple.com
Date
2012-03-29 00:35:00 -0700 (Thu, 29 Mar 2012)

Log Message

Server support for IPv6 listening sockets.

Modified Paths

Property Changed

Diff

Modified: CalendarServer/trunk/calendarserver/tap/caldav.py (8948 => 8949)


--- CalendarServer/trunk/calendarserver/tap/caldav.py	2012-03-28 22:41:11 UTC (rev 8948)
+++ CalendarServer/trunk/calendarserver/tap/caldav.py	2012-03-29 07:35:00 UTC (rev 8949)
@@ -862,11 +862,12 @@
     def _allBindAddresses(self):
         """
         An empty array for the config value of BindAddresses should be
-        equivalent a BindAddresses with a single empty string, meaning "bind
-        everything".
+        equivalent to an array containing two BindAddresses; one with a single
+        empty string, and one with "::", meaning "bind everything on both IPv4
+        and IPv6".
         """
         if not config.BindAddresses:
-            config.BindAddresses = [""]
+            config.BindAddresses = ["", "::"]
         return config.BindAddresses
 
 

Modified: CalendarServer/trunk/twext/internet/sendfdport.py (8948 => 8949)


--- CalendarServer/trunk/twext/internet/sendfdport.py	2012-03-28 22:41:11 UTC (rev 8948)
+++ CalendarServer/trunk/twext/internet/sendfdport.py	2012-03-29 07:35:00 UTC (rev 8949)
@@ -22,8 +22,8 @@
 
 from os import close
 from errno import EAGAIN, ENOBUFS
-from socket import (socketpair, fromfd, error as SocketError,
-                    AF_INET, AF_UNIX, SOCK_STREAM, SOCK_DGRAM)
+from socket import (socketpair, fromfd, error as SocketError, AF_UNIX,
+                    SOCK_STREAM, SOCK_DGRAM)
 
 from twisted.python import log
 
@@ -32,6 +32,7 @@
 
 from twext.python.sendmsg import sendmsg, recvmsg
 from twext.python.sendfd import sendfd, recvfd
+from twext.python.sendmsg import getsockfam
 
 class InheritingProtocol(Protocol, object):
     """
@@ -273,7 +274,7 @@
                 raise
         else:
             try:
-                skt = fromfd(fd, AF_INET, SOCK_STREAM)
+                skt = fromfd(fd, getsockfam(fd), SOCK_STREAM)
                 # XXX it could be AF_UNIX, I guess?  or even something else?
                 # should this be on the transportFactory's side of things?
 

Modified: CalendarServer/trunk/twext/python/sendmsg.c (8948 => 8949)


--- CalendarServer/trunk/twext/python/sendmsg.c	2012-03-28 22:41:11 UTC (rev 8948)
+++ CalendarServer/trunk/twext/python/sendmsg.c	2012-03-29 07:35:00 UTC (rev 8949)
@@ -42,12 +42,15 @@
 
 static PyObject *sendmsg_sendmsg(PyObject *self, PyObject *args, PyObject *keywds);
 static PyObject *sendmsg_recvmsg(PyObject *self, PyObject *args, PyObject *keywds);
+static PyObject *sendmsg_getsockfam(PyObject *self, PyObject *args, PyObject *keywds);
 
 static PyMethodDef sendmsg_methods[] = {
     {"sendmsg", (PyCFunction) sendmsg_sendmsg, METH_VARARGS | METH_KEYWORDS,
      NULL},
     {"recvmsg", (PyCFunction) sendmsg_recvmsg, METH_VARARGS | METH_KEYWORDS,
      NULL},
+    {"getsockfam", (PyCFunction) sendmsg_getsockfam,
+     METH_VARARGS | METH_KEYWORDS, NULL},
     {NULL, NULL, 0, NULL}
 };
 
@@ -404,3 +407,23 @@
     return final_result;
 }
 
+static PyObject *sendmsg_getsockfam(PyObject *self, PyObject *args,
+                                    PyObject *keywds) {
+    int fd;
+    struct sockaddr sa;
+    static char *kwlist[] = {"fd", NULL};
+    if (!PyArg_ParseTupleAndKeywords(args, keywds, "i", kwlist, &fd)) {
+        return NULL;
+    }
+    socklen_t sz = sizeof(sa);
+    if (getsockname(fd, &sa, &sz)) {
+        PyErr_SetFromErrno(sendmsg_socket_error);
+        return NULL;
+    }
+    PyObject *rval;
+    if ((rval = Py_BuildValue("i", sa.sa_family)) == NULL) {
+        return NULL;
+    }
+    Py_DECREF(rval);
+    return rval;
+}