diff options
| author | Roberto De Ioris <roberto@unbit.it> | 2014-05-12 02:33:41 +0200 |
|---|---|---|
| committer | Roberto De Ioris <roberto@unbit.it> | 2014-05-12 02:33:41 +0200 |
| commit | c94aa42a021b1935122e4b37c5042a09d1bb9ef7 (patch) | |
| tree | c81f9f80f64438aae2e718fc750e89e2ecb20dff /core/fork_server.c | |
| parent | c01d6242adbe03742bd4920663cef2bf69aefcbe (diff) | |
| download | uwsgi-c94aa42a021b1935122e4b37c5042a09d1bb9ef7.tar.gz | |
added support for emperor protocol in the fork server
Diffstat (limited to 'core/fork_server.c')
| -rw-r--r-- | core/fork_server.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/core/fork_server.c b/core/fork_server.c index 232678c4..18beb88c 100644 --- a/core/fork_server.c +++ b/core/fork_server.c @@ -33,8 +33,27 @@ void uwsgi_fork_server(char *socket) { // automatically receive credentials (TODO make something useful with them, like checking the pid is from the Emperor) if (uwsgi_socket_passcred(fd)) exit(1); + // initialize the event queue + int eq = event_queue_init(); + if (uwsgi.has_emperor) { + event_queue_add_fd_read(eq, uwsgi.emperor_fd); + } + event_queue_add_fd_read(eq, fd); + // now start waiting for connections for(;;) { + int interesting_fd = -1; + int rlen = event_queue_wait(eq, -1, &interesting_fd); + if (rlen <= 0) continue; + if (uwsgi.has_emperor && interesting_fd == uwsgi.emperor_fd) { + char byte; + ssize_t rlen = read(uwsgi.emperor_fd, &byte, 1); + if (rlen > 0) { + uwsgi_log_verbose("received message %d from emperor\n", byte); + } + exit(0); + } + if (interesting_fd != fd) continue; struct sockaddr_un client_src; socklen_t client_src_len = 0; int client_fd = accept(fd, (struct sockaddr *) &client_src, &client_src_len); |
