]> andersk Git - moira.git/blobdiff - lib/mr_connect.c
watch out for EINTR when accept()ing
[moira.git] / lib / mr_connect.c
index 6ce40e8845418937a6c87d4028053a2946deae51..3dcd4af40c528db1fbc11df1154042fea3ca7a88 100644 (file)
@@ -270,12 +270,15 @@ int mr_listen(char *port)
 
 int mr_accept(int s, struct sockaddr_in *sin)
 {
-  int conn, addrlen = sizeof(struct sockaddr_in), nread, status;
+  int conn = -1, addrlen = sizeof(struct sockaddr_in), nread, status;
   char *buf = NULL;
 
-  conn = accept(s, (struct sockaddr *)sin, &addrlen);
-  if (conn < 0)
-    return -1;
+  while (conn < 0)
+    {
+      conn = accept(s, (struct sockaddr *)sin, &addrlen);
+      if (conn < 0 && errno != EINTR)
+       return -1;
+    }
 
   do
     status = mr_cont_accept(conn, &buf, &nread);
This page took 0.030898 seconds and 4 git commands to generate.