Subject: Re: [PATCH 2/3] git-instaweb: Wait for server to start before running web browser

From: Jakub Narebski <[email-masked]>
Date: Fri, 28 May 2010 21:58:55 +0200

On Fri, 28 May 2010, Pavan Kumar Sunkara wrote:
> Jakub Narebski wrote;
> >
> > It uses IO::Socket::INET module, which is core Perl module since v5.6.0.
> 
> Core module means it will be installed by default in v5.6. But what
> happens in case of lower versions of Perl?

Gitweb itself requires even higher version of Perl for its utf-8
support: at least v5.8.0 for Encode module, and IIRC at least v5.8.3
or even v5.8.6 for correct handling of utf-8.

Perl v5.8.6 was released in 2006.

> 
> > +httpd_is_ready () {
> > +       "$PERL" -MIO::Socket::INET -e "
> > +local \$| = 1; # turn on autoflush
> > +exit if (IO::Socket::INET->new('127.0.0.1:$port'));
> > +print 'Waiting for \'$httpd\' to start ..';
> > +do {
> > +       print '.';
> > +       sleep(1);
> > +} until (IO::Socket::INET->new('127.0.0.1:$port'));
> > +print qq! (done)\n!;
> > +"
> > +}
> > +
> 
> One of the solution is to add a web server specific branch in httpd_is_ready().
> So, if the server is plackup it load the module and checks the port,
> if not it will just continue.
> 
> Just an idea for a common usage.

The above solution is universal, and works for any web server.  

We can add web server specific branch in httpd_is_ready() to use e.g. 
server_startup hook (and some blocking mechanism) for server(s) which
support it.

-- 
Jakub Narebski
Poland