Split out the connect waiting loop from do_listen() for avoiding duplicate codes
between listen mode and virt-server mode.

Signed-off-by: Yoshihiro YUNOMAE <[email protected]>
---
 trace-listen.c |   45 ++++++++++++++++++++++++++-------------------
 1 file changed, 26 insertions(+), 19 deletions(-)

diff --git a/trace-listen.c b/trace-listen.c
index 6c1bcac..c741fa4 100644
--- a/trace-listen.c
+++ b/trace-listen.c
@@ -580,14 +580,35 @@ static void clean_up(int sig)
        } while (ret > 0);
 }
 
+static void do_accept_loop(int sfd)
+{
+       struct sockaddr_storage peer_addr;
+       socklen_t peer_addr_len;
+       int cfd, pid;
+
+       peer_addr_len = sizeof(peer_addr);
+
+       do {
+               cfd = accept(sfd, (struct sockaddr *)&peer_addr,
+                            &peer_addr_len);
+               printf("connected!\n");
+               if (cfd < 0 && errno == EINTR)
+                       continue;
+               if (cfd < 0)
+                       pdie("connecting");
+
+               pid = do_connection(cfd, &peer_addr, peer_addr_len);
+               if (pid > 0)
+                       add_process(pid);
+
+       } while (!done);
+}
+
 static void do_listen(char *port)
 {
        struct addrinfo hints;
        struct addrinfo *result, *rp;
-       int sfd, s, cfd;
-       struct sockaddr_storage peer_addr;
-       socklen_t peer_addr_len;
-       int pid;
+       int sfd, s;
 
        if (!debug)
                signal_setup(SIGCHLD, clean_up);
@@ -621,21 +642,7 @@ static void do_listen(char *port)
        if (listen(sfd, backlog) < 0)
                pdie("listen");
 
-       peer_addr_len = sizeof(peer_addr);
-
-       do {
-               cfd = accept(sfd, (struct sockaddr *)&peer_addr, 
&peer_addr_len);
-               printf("connected!\n");
-               if (cfd < 0 && errno == EINTR)
-                       continue;
-               if (cfd < 0)
-                       pdie("connecting");
-
-               pid = do_connection(cfd, &peer_addr, peer_addr_len);
-               if (pid > 0)
-                       add_process(pid);
-
-       } while (!done);
+       do_accept_loop(sfd);
 
        kill_clients();
 }

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to