Specifically it waits for the socket timeout of 60 seconds here:

rocket.py line 1063:
        # Wait until they pull the
trigger
        for t in self.threads:
            if t.isAlive():
                t.join()

I feel it is ok to have the timeout set to 60secs but not here. I have
not yet found a way to change the timeout at this point.
I tried

rocket.py line 1063:
        # Wait until they pull the
trigger
        for t in self.threads:
            if t.isAlive():
                t.conn.socket.settimeout(1) #<<<<
                t.join()

but it did not change a thing.

On Jan 30, 8:20 pm, Massimo Di Pierro <massimo.dipie...@gmail.com>
wrote:
> Progress.
>
> reverting this change makes the problem go away:
>
> http://code.google.com/p/web2py/source/diff?spec=svn9619eb054669ed593...
>
> The problem is that the socket timeout was increased from 1 to 60 so
> that the web server does not close connections with slow clients.
> Somehow CTRL-C gets queued until the 60 seconds expire.
>
> Massimo
>
> On Jan 30, 5:01 pm, Ricardo Pedroso <rmdpedr...@gmail.com> wrote:
>
>
>
>
>
>
>
> > On Sun, Jan 29, 2012 at 5:28 PM, Ricardo Pedroso <rmdpedr...@gmail.com> 
> > wrote:
> > > On Sun, Jan 29, 2012 at 4:27 PM, Massimo Di Pierro
> > > <massimo.dipie...@gmail.com> wrote:
>
> > >> I used to be able to stop the server with CRTL+C but it does not work
> > >> anymore on my mac. I now have to kill it. Why?
>
> > > I'm new to web2py, but I already see this happened
> > > in other scripts when working with sockets and threads.
>
> > I've been analyzing this issue and I think I've found the problem
> > I think the problem could be with HTTP/1.1 keep_alive feature.
>
> > How to test:
> > 1. In a console start web2py:
> > $ ./web2py
>
> > 2. In other console start a telnet connection to web2py:
> > $ telnet 127.0.0.1 8000
> > GET / HTTP/1.1<CR>
> > Host: 127.0.0.1:8000<CR>
> > Connection: keep-alive<CR>
> > <CR>
>
> > After this last <CR>, telnet session doesn't quit.
>
> > Now in the other console stop web2py with CTRL-C
> > it will hand, but if you kill the telnet web2py quit immediately.
>
> > This test can be done with a browser also:
> > Just run one and only one browser instance and gotohttp://127.0.0.1:8000
> > Then CTRL-C web2py, it will hang
> > Close your browser and web2py quits immediately
>
> > web2py after some time eventually quits, the socket will timeout, I'm not
> > sure but this timeout is the default from the OS.
>
> > web2py is hanging in the thread join in rocket.py around line 1066 in
> > the stop method.
>
> > This was not easy for me to explain but I hope that I gave some more
> > leads to this issue.
>
> > Ricardo

Reply via email to