Handle "Unix Domain Sockets" in Rock code.
authorDan Cross <crossd@gmail.com>
Fri, 2 Dec 2016 20:52:13 +0000 (15:52 -0500)
committerBarret Rhoden <brho@cs.berkeley.edu>
Mon, 5 Dec 2016 15:38:13 +0000 (10:38 -0500)
We approximate Unix domain sockets using pipes.
You can't listen() or accept() on them, but you
can read() and write() on them. Accommodate this
minimal pseudo-support by handling sockets of
PF_UNIX type in the Rock support code.

We need a more robust emulation of this family.

Change-Id: Iac4d3f3a4d77589b05ac9e52e38266a2f866602e
Signed-off-by: Dan Cross <crossd@gmail.com>
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
tools/compilers/gcc-glibc/glibc-2.19-akaros/sysdeps/akaros/plan9_sockets.c

index 2883323..72ad486 100644 (file)
@@ -313,8 +313,8 @@ static int _rock_get_listen_fd(Rock *r)
        if (r->has_listen_fd)
                return r->listen_fd;
        if (r->ctl == NULL || r->ctl[0] != '/') {
-               fprintf(stderr, "r->ctl corrupt: '%s'\n",
-                       r->ctl == NULL ? "NULL" : r->ctl);
+               fprintf(stderr, "r->ctl corrupt: '%s' (domain = %d)\n",
+                       (r->ctl == NULL ? "NULL" : r->ctl), r->domain);
                assert(r->ctl != NULL && r->ctl[0] == '/');
        }
        strlcpy(listen_file, r->ctl, sizeof(listen_file));
@@ -345,7 +345,7 @@ int _sock_lookup_listen_fd(int sock_fd)
 {
        Rock *r = _sock_findrock(sock_fd, 0);
 
-       if (!r)
+       if (!r || r->domain == PF_UNIX)
                return -1;
        return _rock_get_listen_fd(r);
 }