]> granicus.if.org Git - python/commitdiff
Fixes for AF_UNIX support on OS/2:
authorAndrew MacIntyre <andymac@bullseye.apana.org.au>
Sun, 11 Apr 2004 12:03:57 +0000 (12:03 +0000)
committerAndrew MacIntyre <andymac@bullseye.apana.org.au>
Sun, 11 Apr 2004 12:03:57 +0000 (12:03 +0000)
- return the full size of the sockaddr_un structure, without which
  bind() fails with EINVAL;
- set test_socketserver to use a socket name that meets the form
  required by the underlying implementation;
- don't bother exercising the forking AF_UNIX tests on EMX - its
  fork() can't handle the stress.

Lib/test/test_socketserver.py
Modules/socketmodule.c

index cee5593b61407f5223a8eaab47fbc29d697800a2..1245ba5fbf27da9a6216442d58ff7d17aaf6f4b0 100644 (file)
@@ -94,6 +94,19 @@ def pickaddr(proto):
         return (host, pickport())
     else:
         fn = TESTFN + str(pickport())
+        if os.name == 'os2':
+            # AF_UNIX socket names on OS/2 require a specific prefix
+            # which can't include a drive letter and must also use
+            # backslashes as directory separators
+            if fn[1] == ':':
+                fn = fn[2:]
+            if fn[0] in (os.sep, os.altsep):
+                fn = fn[1:]
+            fn = os.path.join('\socket', fn)
+            if os.sep == '/':
+                fn = fn.replace(os.sep, os.altsep)
+            else:
+                fn = fn.replace(os.altsep, os.sep)
         testfiles.append(fn)
         return fn
 
@@ -135,11 +148,13 @@ if not hasattr(socket, 'AF_UNIX'):
     dgramservers = []
 else:
     class ForkingUnixStreamServer(ForkingMixIn, UnixStreamServer): pass
-    streamservers = [UnixStreamServer, ThreadingUnixStreamServer,
-                     ForkingUnixStreamServer]
+    streamservers = [UnixStreamServer, ThreadingUnixStreamServer]
+    if hasattr(os, 'fork') and os.name not in ('os2',):
+        streamservers.append(ForkingUnixStreamServer)
     class ForkingUnixDatagramServer(ForkingMixIn, UnixDatagramServer): pass
-    dgramservers = [UnixDatagramServer, ThreadingUnixDatagramServer,
-                    ForkingUnixDatagramServer]
+    dgramservers = [UnixDatagramServer, ThreadingUnixDatagramServer]
+    if hasattr(os, 'fork') and os.name not in ('os2',):
+        dgramservers.append(ForkingUnixDatagramServer)
 
 def testall():
     testloop(socket.AF_INET, tcpservers, MyStreamHandler, teststream)
index d97303324edf3e35851216fc60cacf17627b04a1..0989171f787c2df29a38db93d5bb4e878084a183 100644 (file)
@@ -966,7 +966,11 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args,
                memcpy(addr->sun_path, path, len);
                addr->sun_path[len] = 0;
                *addr_ret = (struct sockaddr *) addr;
+#if defined(PYOS_OS2)
+               *len_ret = sizeof(*addr);
+#else
                *len_ret = len + sizeof(*addr) - sizeof(addr->sun_path);
+#endif
                return 1;
        }
 #endif /* AF_UNIX */