[Twisted-web] Close TCP Connection Using web resource.Resource

Drew Smathers drew.smathers at gmail.com
Thu May 7 14:47:33 EDT 2009


On Thu, May 7, 2009 at 2:05 PM, Michael Toop <michaelt at voxtelecom.co.za> wrote:
> Hi,
>
>  We are struggling to close a TCP connection using web
> resource.Resource (the TR69 SOAP spec. mandates that we close the connection
> when we are done).
>
>  Our site is served in a TCP reactor & uses the NOT_DONE_YET variable in the
> def render_POST method.  We close the render_POST with a
> request.write('data') & a request.finish() but the connection stays open,
> stub code below.
>
>  We are not sure if it is the fact that we are using chunked encoding or if
> this is a bug?
>
>  Please assist.
>
> Warm Regards,
>
> Michael Toop
>
> def render_POST(self,request):
>    ...do stuff
>   d = getSoapText(request)
>   d.addCallback(request.write)
>   d.addCallback(request.close())
>   return server.NOT_DONE_YET
>

I'm guessing it was a typo above and should be something like:

  d.addCallback(lambda ign: request.finish())

Also, I don't think request.finish necessarily entails closing the
connection as this depends upon whether or the channel is persistent
via keep-alive.

I think the rules for connection persistence in twisted.web are:

HTTP 1.0:
           non-persistent
HTTP 1.1 and "Connection: close" in request headers:          non-persistent
HTTP 1.1 and "Connection: close" NOT in request headers:   persistent

-Drew



More information about the Twisted-web mailing list