libuv/docs/code/cgi/main.c
Go to the documentation of this file.
1 #include <inttypes.h>
2 #include <stdio.h>
3 #include <stdlib.h>
4 #include <string.h>
5 #include <uv.h>
6 
10 
11 void cleanup_handles(uv_process_t *req, int64_t exit_status, int term_signal) {
12  fprintf(stderr, "Process exited with status %" PRId64 ", signal %d\n", exit_status, term_signal);
13  uv_close((uv_handle_t*) req->data, NULL);
14  uv_close((uv_handle_t*) req, NULL);
15 }
16 
18  size_t size = 500;
19  char path[size];
20  uv_exepath(path, &size);
21  strcpy(path + (strlen(path) - strlen("cgi")), "tick");
22 
23  char* args[2];
24  args[0] = path;
25  args[1] = NULL;
26 
27  /* ... finding the executable path and setting up arguments ... */
28 
29  options.stdio_count = 3;
30  uv_stdio_container_t child_stdio[3];
31  child_stdio[0].flags = UV_IGNORE;
32  child_stdio[1].flags = UV_INHERIT_STREAM;
33  child_stdio[1].data.stream = (uv_stream_t*) client;
34  child_stdio[2].flags = UV_IGNORE;
35  options.stdio = child_stdio;
36 
38  options.file = args[0];
39  options.args = args;
40 
41  // Set this so we can close the socket after the child process exits.
42  child_req.data = (void*) client;
43  int r;
44  if ((r = uv_spawn(loop, &child_req, &options))) {
45  fprintf(stderr, "%s\n", uv_strerror(r));
46  return;
47  }
48 }
49 
51  if (status == -1) {
52  // error!
53  return;
54  }
55 
56  uv_tcp_t *client = (uv_tcp_t*) malloc(sizeof(uv_tcp_t));
58  if (uv_accept(server, (uv_stream_t*) client) == 0) {
60  }
61  else {
62  uv_close((uv_handle_t*) client, NULL);
63  }
64 }
65 
66 int main() {
68 
71 
72  struct sockaddr_in bind_addr;
73  uv_ip4_addr("0.0.0.0", 7000, &bind_addr);
74  uv_tcp_bind(&server, (const struct sockaddr *)&bind_addr, 0);
76  if (r) {
77  fprintf(stderr, "Listen error %s\n", uv_err_name(r));
78  return 1;
79  }
80  return uv_run(loop, UV_RUN_DEFAULT);
81 }
uv_process_options_s
Definition: uv.h:940
uv_process_s
Definition: uv.h:1037
loop
uv_loop_t * loop
Definition: libuv/docs/code/cgi/main.c:7
UV_IGNORE
@ UV_IGNORE
Definition: uv.h:911
client
Definition: examples/python/async_streaming/client.py:1
string.h
uv_listen
UV_EXTERN int uv_listen(uv_stream_t *stream, int backlog, uv_connection_cb cb)
Definition: unix/stream.c:656
uv_process_options_s::exit_cb
uv_exit_cb exit_cb
Definition: uv.h:941
main
int main()
Definition: libuv/docs/code/cgi/main.c:66
on_new_connection
void on_new_connection(uv_stream_t *server, int status)
Definition: libuv/docs/code/cgi/main.c:50
status
absl::Status status
Definition: rls.cc:251
uv_strerror
const UV_EXTERN char * uv_strerror(int err)
Definition: uv-common.c:212
check_documentation.path
path
Definition: check_documentation.py:57
uv_run
UV_EXTERN int uv_run(uv_loop_t *, uv_run_mode mode)
Definition: unix/core.c:361
uv_tcp_bind
UV_EXTERN int uv_tcp_bind(uv_tcp_t *handle, const struct sockaddr *addr, unsigned int flags)
Definition: uv-common.c:277
python_utils.port_server.stderr
stderr
Definition: port_server.py:51
uv_close
UV_EXTERN void uv_close(uv_handle_t *handle, uv_close_cb close_cb)
Definition: unix/core.c:112
uv_stream_s
Definition: uv.h:491
uv_ip4_addr
UV_EXTERN int uv_ip4_addr(const char *ip, int port, struct sockaddr_in *addr)
Definition: uv-common.c:221
uv_process_options_s::file
const char * file
Definition: uv.h:942
child_req
uv_process_t child_req
Definition: libuv/docs/code/cgi/main.c:8
server
std::unique_ptr< Server > server
Definition: channelz_service_test.cc:330
uv_default_loop
UV_EXTERN uv_loop_t * uv_default_loop(void)
Definition: uv-common.c:733
asyncio_get_stats.args
args
Definition: asyncio_get_stats.py:40
uv_stdio_container_s::flags
uv_stdio_flags flags
Definition: uv.h:932
uv_process_options_s::stdio
uv_stdio_container_t * stdio
Definition: uv.h:975
int64_t
signed __int64 int64_t
Definition: stdint-msvc2008.h:89
uv_process_options_s::args
char ** args
Definition: uv.h:949
req
static uv_connect_t req
Definition: test-connection-fail.c:30
UV_RUN_DEFAULT
@ UV_RUN_DEFAULT
Definition: uv.h:254
uv_process_options_s::stdio_count
int stdio_count
Definition: uv.h:974
UV_INHERIT_STREAM
@ UV_INHERIT_STREAM
Definition: uv.h:914
options
uv_process_options_t options
Definition: libuv/docs/code/cgi/main.c:9
uv_tcp_init
UV_EXTERN int uv_tcp_init(uv_loop_t *, uv_tcp_t *handle)
Definition: unix/tcp.c:143
uv_accept
UV_EXTERN int uv_accept(uv_stream_t *server, uv_stream_t *client)
Definition: unix/stream.c:591
uv_stdio_container_s
Definition: uv.h:931
uv_tcp_s
Definition: uv.h:544
uv_spawn
UV_EXTERN int uv_spawn(uv_loop_t *loop, uv_process_t *handle, const uv_process_options_t *options)
Definition: unix/process.c:408
uv_exepath
UV_EXTERN int uv_exepath(char *buffer, size_t *size)
Definition: aix-common.c:79
uv_stdio_container_s::stream
uv_stream_t * stream
Definition: uv.h:935
uv.h
server
Definition: examples/python/async_streaming/server.py:1
fix_build_deps.r
r
Definition: fix_build_deps.py:491
uv_stdio_container_s::data
union uv_stdio_container_s::@399 data
uv_handle_s
Definition: uv.h:441
uv_loop_s
Definition: uv.h:1767
size
voidpf void uLong size
Definition: bloaty/third_party/zlib/contrib/minizip/ioapi.h:136
uv_err_name
const UV_EXTERN char * uv_err_name(int err)
Definition: uv-common.c:189
cleanup_handles
void cleanup_handles(uv_process_t *req, int64_t exit_status, int term_signal)
Definition: libuv/docs/code/cgi/main.c:11
invoke_cgi_script
void invoke_cgi_script(uv_tcp_t *client)
Definition: libuv/docs/code/cgi/main.c:17


grpc
Author(s):
autogenerated on Fri May 16 2025 02:59:17