make para_accept() more robust
authorAndre Noll <maan@congo.fml.local>
Thu, 3 Aug 2006 08:59:04 +0000 (10:59 +0200)
committerAndre Noll <maan@congo.fml.local>
Thu, 3 Aug 2006 08:59:04 +0000 (10:59 +0200)
by checking for EINTR and restarting the accept() system call if neccessary.

net.c

diff --git a/net.c b/net.c
index b05f74da69b62d3fd3a25a7ac58633f1628c1249..66db86bc5f77ece9a628f705dee2198d921e3491 100644 (file)
--- a/net.c
+++ b/net.c
@@ -312,9 +312,9 @@ int para_connect(int fd, struct sockaddr_in *their_addr)
 /**
  * paraslash's wrapper around the accept system call
  *
 /**
  * paraslash's wrapper around the accept system call
  *
- * @param fd the listening socket
- * @param addr structure which is filled in with the address of the peer socket
- * @param size should contain the size of the structure pointed to by \a addr
+ * \param fd the listening socket
+ * \param addr structure which is filled in with the address of the peer socket
+ * \param size should contain the size of the structure pointed to by \a addr
  *
  * \sa accept(2).
  */
  *
  * \sa accept(2).
  */
@@ -322,8 +322,10 @@ int para_accept(int fd, void *addr, socklen_t size)
 {
        int new_fd;
 
 {
        int new_fd;
 
-       new_fd = accept(fd, (struct sockaddr *) addr, &size);
-       return new_fd == -1? -E_ACCEPT : new_fd;
+       do 
+               new_fd = accept(fd, (struct sockaddr *) addr, &size);
+       while (new_fd < 0 && errno == EINTR);
+       return new_fd < 0? -E_ACCEPT : new_fd;
 }
 
 static int setserversockopts(int socket_fd)
 }
 
 static int setserversockopts(int socket_fd)