worker.c
Go to the documentation of this file.
1 #include <assert.h>
2 #include <stdio.h>
3 #include <stdlib.h>
4 #include <string.h>
5 #include <unistd.h>
6 #include <uv.h>
7 
10 
11 typedef struct {
14 } write_req_t;
15 
17  write_req_t *wr = (write_req_t*) req;
18  free(wr->buf.base);
19  free(wr);
20 }
21 
22 void alloc_buffer(uv_handle_t *handle, size_t suggested_size, uv_buf_t *buf) {
23  buf->base = malloc(suggested_size);
24  buf->len = suggested_size;
25 }
26 
28  if (status) {
29  fprintf(stderr, "Write error %s\n", uv_err_name(status));
30  }
32 }
33 
35  if (nread > 0) {
36  write_req_t *req = (write_req_t*) malloc(sizeof(write_req_t));
37  req->buf = uv_buf_init(buf->base, nread);
38  uv_write((uv_write_t*) req, client, &req->buf, 1, echo_write);
39  return;
40  }
41 
42  if (nread < 0) {
43  if (nread != UV_EOF)
44  fprintf(stderr, "Read error %s\n", uv_err_name(nread));
45  uv_close((uv_handle_t*) client, NULL);
46  }
47 
48  free(buf->base);
49 }
50 
52  if (nread < 0) {
53  if (nread != UV_EOF)
54  fprintf(stderr, "Read error %s\n", uv_err_name(nread));
55  uv_close((uv_handle_t*) q, NULL);
56  return;
57  }
58 
59  uv_pipe_t *pipe = (uv_pipe_t*) q;
60  if (!uv_pipe_pending_count(pipe)) {
61  fprintf(stderr, "No pending count\n");
62  return;
63  }
64 
66  assert(pending == UV_TCP);
67 
68  uv_tcp_t *client = (uv_tcp_t*) malloc(sizeof(uv_tcp_t));
70  if (uv_accept(q, (uv_stream_t*) client) == 0) {
71  uv_os_fd_t fd;
72  uv_fileno((const uv_handle_t*) client, &fd);
73  fprintf(stderr, "Worker %d: Accepted fd %d\n", getpid(), fd);
75  }
76  else {
77  uv_close((uv_handle_t*) client, NULL);
78  }
79 }
80 
81 int main() {
83 
84  uv_pipe_init(loop, &queue, 1 /* ipc */);
85  uv_pipe_open(&queue, 0);
87  return uv_run(loop, UV_RUN_DEFAULT);
88 }
uv_pipe_pending_count
UV_EXTERN int uv_pipe_pending_count(uv_pipe_t *handle)
Definition: unix/pipe.c:298
main
int main()
Definition: worker.c:81
write_req_t::req
uv_write_t req
Definition: worker.c:12
uv_pipe_init
UV_EXTERN int uv_pipe_init(uv_loop_t *, uv_pipe_t *handle, int ipc)
Definition: unix/pipe.c:33
uv_handle_type
uv_handle_type
Definition: uv.h:189
free_write_req
void free_write_req(uv_write_t *req)
Definition: worker.c:16
client
Definition: examples/python/async_streaming/client.py:1
string.h
buf
voidpf void * buf
Definition: bloaty/third_party/zlib/contrib/minizip/ioapi.h:136
write_req_t
Definition: worker.c:11
status
absl::Status status
Definition: rls.cc:251
uv_run
UV_EXTERN int uv_run(uv_loop_t *, uv_run_mode mode)
Definition: unix/core.c:361
grpc_core::pending
P< T > pending()
Definition: try_join_test.cc:50
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_default_loop
UV_EXTERN uv_loop_t * uv_default_loop(void)
Definition: uv-common.c:733
on_new_connection
void on_new_connection(uv_stream_t *q, ssize_t nread, const uv_buf_t *buf)
Definition: worker.c:51
ssize_t
intptr_t ssize_t
Definition: win.h:27
queue
Definition: sync_test.cc:39
uv_write
UV_EXTERN int uv_write(uv_write_t *req, uv_stream_t *handle, const uv_buf_t bufs[], unsigned int nbufs, uv_write_cb cb)
Definition: unix/stream.c:1492
req
static uv_connect_t req
Definition: test-connection-fail.c:30
UV_RUN_DEFAULT
@ UV_RUN_DEFAULT
Definition: uv.h:254
echo_read
void echo_read(uv_stream_t *client, ssize_t nread, const uv_buf_t *buf)
Definition: worker.c:34
uv_read_start
UV_EXTERN int uv_read_start(uv_stream_t *, uv_alloc_cb alloc_cb, uv_read_cb read_cb)
Definition: unix/stream.c:1555
echo_write
void echo_write(uv_write_t *req, int status)
Definition: worker.c:27
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_tcp_s
Definition: uv.h:544
uv_buf_t::base
char * base
Definition: unix.h:122
uv.h
uv_buf_t
Definition: unix.h:121
uv_fileno
UV_EXTERN int uv_fileno(const uv_handle_t *handle, uv_os_fd_t *fd)
Definition: unix/core.c:755
uv_os_fd_t
int uv_os_fd_t
Definition: unix.h:128
uv_pipe_pending_type
UV_EXTERN uv_handle_type uv_pipe_pending_type(uv_pipe_t *handle)
Definition: unix/pipe.c:315
write_req_t::buf
uv_buf_t buf
Definition: worker.c:13
loop
uv_loop_t * loop
Definition: worker.c:8
uv_pipe_s
Definition: uv.h:757
uv_buf_init
UV_EXTERN uv_buf_t uv_buf_init(char *base, unsigned int len)
Definition: uv-common.c:157
uv_write_s
Definition: uv.h:522
handle
static csh handle
Definition: test_arm_regression.c:16
uv_handle_s
Definition: uv.h:441
uv_loop_s
Definition: uv.h:1767
queue
uv_pipe_t queue
Definition: worker.c:9
uv_err_name
const UV_EXTERN char * uv_err_name(int err)
Definition: uv-common.c:189
uv_pipe_open
UV_EXTERN int uv_pipe_open(uv_pipe_t *, uv_file file)
Definition: unix/pipe.c:137
alloc_buffer
void alloc_buffer(uv_handle_t *handle, size_t suggested_size, uv_buf_t *buf)
Definition: worker.c:22


grpc
Author(s):
autogenerated on Thu Mar 13 2025 03:01:53