[Libwebsockets] CGI on lws

Andy Green andy at warmcat.com
Tue Feb 23 12:06:20 CET 2016


Hi -

I am working on adding a cmake-selectable CGI api to lws, basically

LWS_VISIBLE LWS_EXTERN int
lws_cgi(struct lws *wsi, char * const *exec_array);

LWS_VISIBLE LWS_EXTERN int
lws_cgi_kill(struct lws *wsi);

where the forked process' stdin/out/err is piped on to three slave wsi 
created in the same service thread as the master: these are managed 
through the same event loop as everything else, when the process has 
output, his pipe fd POLLIN fires and there's a user callback where the 
user code can wire it up to outputting it when the sink socket is 
writeable.  That happens piecemeal and multitasked according to the 
combination of server, network and process conditions; the user code in 
the callback can choose to wire it up to http[s] or ws[s] according to 
what they want.

The guts of it work already in my local tree, but there are quite a lot 
of things to take care about with regard to managing the event loop 
properly for all cases, as well as deal with POST -> stdin and that 
might take a while.

The goal of it is to provide a primitive with which you can easily spawn 
"io-encapsulated" subprocesses to the network, ie, run cgi like mailman 
or general scripts or web language interpreters.

I am curious if potential users of it have any comments or suggestions 
about this direction, since it's one of decreasing number of missing 
bits in the lws toolkit from the point of view of it being able to make 
a generic webserver.

-Andy



More information about the Libwebsockets mailing list