Kaydet (Commit) daedf218 authored tarafından Andrew MacIntyre's avatar Andrew MacIntyre

Fixes for AF_UNIX support on OS/2:

- 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.
üst cf6f1b69
...@@ -94,6 +94,19 @@ def pickaddr(proto): ...@@ -94,6 +94,19 @@ def pickaddr(proto):
return (host, pickport()) return (host, pickport())
else: else:
fn = TESTFN + str(pickport()) 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) testfiles.append(fn)
return fn return fn
...@@ -135,11 +148,13 @@ if not hasattr(socket, 'AF_UNIX'): ...@@ -135,11 +148,13 @@ if not hasattr(socket, 'AF_UNIX'):
dgramservers = [] dgramservers = []
else: else:
class ForkingUnixStreamServer(ForkingMixIn, UnixStreamServer): pass class ForkingUnixStreamServer(ForkingMixIn, UnixStreamServer): pass
streamservers = [UnixStreamServer, ThreadingUnixStreamServer, streamservers = [UnixStreamServer, ThreadingUnixStreamServer]
ForkingUnixStreamServer] if hasattr(os, 'fork') and os.name not in ('os2',):
streamservers.append(ForkingUnixStreamServer)
class ForkingUnixDatagramServer(ForkingMixIn, UnixDatagramServer): pass class ForkingUnixDatagramServer(ForkingMixIn, UnixDatagramServer): pass
dgramservers = [UnixDatagramServer, ThreadingUnixDatagramServer, dgramservers = [UnixDatagramServer, ThreadingUnixDatagramServer]
ForkingUnixDatagramServer] if hasattr(os, 'fork') and os.name not in ('os2',):
dgramservers.append(ForkingUnixDatagramServer)
def testall(): def testall():
testloop(socket.AF_INET, tcpservers, MyStreamHandler, teststream) testloop(socket.AF_INET, tcpservers, MyStreamHandler, teststream)
......
...@@ -966,7 +966,11 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args, ...@@ -966,7 +966,11 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args,
memcpy(addr->sun_path, path, len); memcpy(addr->sun_path, path, len);
addr->sun_path[len] = 0; addr->sun_path[len] = 0;
*addr_ret = (struct sockaddr *) addr; *addr_ret = (struct sockaddr *) addr;
#if defined(PYOS_OS2)
*len_ret = sizeof(*addr);
#else
*len_ret = len + sizeof(*addr) - sizeof(addr->sun_path); *len_ret = len + sizeof(*addr) - sizeof(addr->sun_path);
#endif
return 1; return 1;
} }
#endif /* AF_UNIX */ #endif /* AF_UNIX */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment