VMM: Sync halting GPCs and interrupt injection
[akaros.git] / user / iplib / announce.c
index ac51fa7..e261585 100755 (executable)
@@ -25,8 +25,7 @@ enum
 /*
  *  announce a network service.
  */
-int
-announce(char *addr, char *dir)
+int announce9(char *addr, char *dir, int flags)
 {
        int ctl, n, m;
        char buf[Maxpath];
@@ -92,8 +91,7 @@ announce(char *addr, char *dir)
 /*
  *  listen for an incoming call
  */
-int
-listen(char *dir, char *newdir)
+int listen9(char *dir, char *newdir, int flags)
 {
        int ctl, n, m;
        char buf[Maxpath];
@@ -103,9 +101,10 @@ listen(char *dir, char *newdir)
         *  open listen, wait for a call
         */
        snprintf(buf, sizeof(buf), "%s/listen", dir);
-       ctl = open(buf, O_RDWR);
+       ctl = open(buf, O_RDWR | (flags & O_NONBLOCK));
        if(ctl < 0){
-               fprintf(stderr,"listen opening %s: %r\n", buf);
+               if ((errno != EAGAIN) && (errno != EWOULDBLOCK))
+                       fprintf(stderr,"listen opening %s: %r\n", buf);
                return -1;
        }
 
@@ -144,8 +143,7 @@ listen(char *dir, char *newdir)
 /*
  *  accept a call, return an fd to the open data file
  */
-int
-accept(int ctl, char *dir)
+int accept9(int ctl, char *dir)
 {
        char buf[Maxpath];
        char *num;
@@ -167,8 +165,7 @@ accept(int ctl, char *dir)
 /*
  *  reject a call, tell device the reason for the rejection
  */
-int
-reject(int ctl, char *dir, char *cause)
+int reject9(int ctl, char *dir, char *cause)
 {
        char buf[Maxpath];
        char *num;