29

While hitting a REST resource (my_resource) in Python, the uWSGI server is throwing the following error in its log:

SIGPIPE: writing to a closed pipe/socket/fd (probably the client disconnected) on request my_resource (ip <my_ip>) !!!
uwsgi_response_write_body_do(): Broken pipe [core/writer.c line 164]
IOError: write error

It seems to be related to a timeout (the client disconnected before the request could finish processing).

What sort of timeout is this and how can it be fixed?

Juan Carlos Coto
  • 11,900
  • 22
  • 62
  • 102

2 Answers2

14

it depends on your frontend server. For example nginx has the uwsgi_read_timeout parameter. (generally set to 60 seconds). The uWSGI http router as the --http-timeout default to 60 seconds and so on. As you are talking about a rest api i am quite doubtful it requires more than 60 seconds to generate a response, are you sure you do not have some wrong response header triggering a connection close by the frontend webserver ?

roberto
  • 12,723
  • 44
  • 30
  • Yes, I'm pretty sure. There are particular reasons why this single request takes longer to generate a response, which we will deal with when necessary. For now, however, incrementing the timeout seems to be the way to go. Thanks! – Juan Carlos Coto Jun 10 '14 at 16:26
  • I have the same problem and could not solve it this way. Im using Flask and i expect request being a bit bigger since they bring audio binary data with variable duration between 2secs and 15secs. Even with small audio samples traveling in the request i keep getting thisi message in the error log. – lithiumlab May 08 '16 at 17:43
  • the issue i had was fixed upgrading openssl version 1.0.2g – lithiumlab May 12 '16 at 03:45
8

if you are using the uwsgi nginx plugin, consider using

uwsgi_connect_timeout 180;
uwsgi_read_timeout 180;
uwsgi_send_timeout 180;
Chris Maes
  • 35,025
  • 12
  • 111
  • 136