> infact it internally calls sendfile()

If that's the case, then the reason it fails because sendfile() only works
from real file fd to a socket fd.

Does stdout count as local file fd?






On Wed, Aug 28, 2013 at 5:44 PM, Roberto De Ioris <[email protected]> wrote:

>
> > Hello,
> >
> > I am experimenting wrapping external process stdin and stdout to a web
> > service using simple uWSGI.
> >
> > The demo is like this:
> >
> >
> > def hello_app(environ, start_response):
> > start_response('200 OK', [('Content-Type', 'text/plain')])
> >  proc = subprocess.Popen("echo hello world", shell=True,
> > stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
> > return environ['wsgi.file_wrapper'](proc.stdout)
> >
> >
> > This works in wsgiref
> >
> > from wsgiref.simple_server import make_server
> > make_server('', 8086, hello_app).serve_forever()
> >
> >
> > But not in uWSGI
> >
> > uwsgi --http 0:8086 --wsgi  bj:hello_app
> >
> > It returns zero sized http response
> >
> >
> > (and not working in bjeron, too, shows errno 22.)
> >
> >
> >
>
> file_wrapper is an optimization for files (infact it internally calls
> sendfile() or something similar). sendfile over pipes does not work.
>
> eventually you can map the stdout of the process to uwsgi.connection_fd()
> file descriptor, but it is really ugly.
>
> Even better (and more WSGI friendly) would be buffering the output and
> then send it as string/bytes
>
>
> --
> Roberto De Ioris
> http://unbit.it
> _______________________________________________
> uWSGI mailing list
> [email protected]
> http://lists.unbit.it/cgi-bin/mailman/listinfo/uwsgi
>
_______________________________________________
uWSGI mailing list
[email protected]
http://lists.unbit.it/cgi-bin/mailman/listinfo/uwsgi

Reply via email to