Messages in this thread | | | Date | Tue, 20 Aug 2013 13:49:02 -0400 | From | Steven Rostedt <> | Subject | Re: [RFC PATCH 07/11] [CLEANUP] trace-cmd: Split out binding a port and fork reader from open_udp() |
| |
On Mon, 19 Aug 2013 18:46:37 +0900 Yoshihiro YUNOMAE <yoshihiro.yunomae.ez@hitachi.com> wrote:
> Split out binding a port and fork reader from open_udp() for avoiding duplicate > codes between listen mode and virt-server mode. > > Signed-off-by: Yoshihiro YUNOMAE <yoshihiro.yunomae.ez@hitachi.com> > --- > trace-listen.c | 34 ++++++++++++++++++++++++++-------- > 1 file changed, 26 insertions(+), 8 deletions(-) > > diff --git a/trace-listen.c b/trace-listen.c > index f29dd35..bf9ef9d 100644 > --- a/trace-listen.c > +++ b/trace-listen.c > @@ -228,13 +228,12 @@ static void process_udp_child(int sfd, const char *host, const char *port, > #define START_PORT_SEARCH 1500 > #define MAX_PORT_SEARCH 6000 > > -static int open_udp(const char *node, const char *port, int *pid, > - int cpu, int pagesize, int start_port) > +static int udp_bind_a_port(int start_port, int *sfd) > { > struct addrinfo hints; > struct addrinfo *result, *rp; > - int sfd, s; > char buf[BUFSIZ]; > + int s; > int num_port = start_port; > > again: > @@ -250,15 +249,15 @@ static int open_udp(const char *node, const char *port, int *pid, > pdie("getaddrinfo: error opening udp socket"); > > for (rp = result; rp != NULL; rp = rp->ai_next) { > - sfd = socket(rp->ai_family, rp->ai_socktype, > - rp->ai_protocol); > - if (sfd < 0) > + *sfd = socket(rp->ai_family, rp->ai_socktype, > + rp->ai_protocol); > + if (*sfd < 0) > continue; > > - if (bind(sfd, rp->ai_addr, rp->ai_addrlen) == 0) > + if (bind(*sfd, rp->ai_addr, rp->ai_addrlen) == 0) > break; > > - close(sfd); > + close(*sfd); > } > > if (rp == NULL) { > @@ -270,6 +269,12 @@ static int open_udp(const char *node, const char *port, int *pid, > > freeaddrinfo(result); > > + return num_port; > +} > + > +static void fork_udp_reader(int sfd, const char *node, const char *port, > + int *pid, int cpu, int pagesize) > +{ > *pid = fork(); > > if (*pid < 0) > @@ -279,6 +284,19 @@ static int open_udp(const char *node, const char *port, int *pid, > process_udp_child(sfd, node, port, cpu, pagesize); > > close(sfd); > +} > + > +static int open_udp(const char *node, const char *port, int *pid, > + int cpu, int pagesize, int start_port) > +{ > + int sfd; > + int num_port; > + > + num_port = udp_bind_a_port(start_port, &sfd); > + if (num_port < 0) > + return num_port;
I don't see how num_port could be less than zero.
-- Steve
> + > + fork_udp_reader(sfd, node, port, pid, cpu, pagesize); > > return num_port; > }
| |