From 039fbf2180b2db5b1f47c4691940f5e41c0fbae3 Mon Sep 17 00:00:00 2001 From: Andre Noll Date: Thu, 3 Aug 2006 10:59:04 +0200 Subject: [PATCH] make para_accept() more robust by checking for EINTR and restarting the accept() system call if neccessary. --- net.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/net.c b/net.c index b05f74da..66db86bc 100644 --- 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 * - * @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). */ @@ -322,8 +322,10 @@ int para_accept(int fd, void *addr, socklen_t size) { 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) -- 2.39.5