libuv/docs/code/tcp-echo-server/main.c
Go to the documentation of this file.
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <string.h>
4 #include <uv.h>
5 
6 #define DEFAULT_PORT 7000
7 #define DEFAULT_BACKLOG 128
8 
10 struct sockaddr_in addr;
11 
12 typedef struct {
14  uv_buf_t buf;
15 } write_req_t;
16 
18  write_req_t *wr = (write_req_t*) req;
19  free(wr->buf.base);
20  free(wr);
21 }
22 
23 void alloc_buffer(uv_handle_t *handle, size_t suggested_size, uv_buf_t *buf) {
24  buf->base = (char*) malloc(suggested_size);
25  buf->len = suggested_size;
26 }
27 
29  free(handle);
30 }
31 
33  if (status) {
34  fprintf(stderr, "Write error %s\n", uv_strerror(status));
35  }
37 }
38 
40  if (nread > 0) {
41  write_req_t *req = (write_req_t*) malloc(sizeof(write_req_t));
42  req->buf = uv_buf_init(buf->base, nread);
43  uv_write((uv_write_t*) req, client, &req->buf, 1, echo_write);
44  return;
45  }
46  if (nread < 0) {
47  if (nread != UV_EOF)
48  fprintf(stderr, "Read error %s\n", uv_err_name(nread));
50  }
51 
52  free(buf->base);
53 }
54 
56  if (status < 0) {
57  fprintf(stderr, "New connection error %s\n", uv_strerror(status));
58  // error!
59  return;
60  }
61 
62  uv_tcp_t *client = (uv_tcp_t*) malloc(sizeof(uv_tcp_t));
64  if (uv_accept(server, (uv_stream_t*) client) == 0) {
66  }
67  else {
69  }
70 }
71 
72 int main() {
74 
77 
78  uv_ip4_addr("0.0.0.0", DEFAULT_PORT, &addr);
79 
80  uv_tcp_bind(&server, (const struct sockaddr*)&addr, 0);
82  if (r) {
83  fprintf(stderr, "Listen error %s\n", uv_strerror(r));
84  return 1;
85  }
86  return uv_run(loop, UV_RUN_DEFAULT);
87 }
alloc_buffer
void alloc_buffer(uv_handle_t *handle, size_t suggested_size, uv_buf_t *buf)
Definition: libuv/docs/code/tcp-echo-server/main.c:23
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
uv_listen
UV_EXTERN int uv_listen(uv_stream_t *stream, int backlog, uv_connection_cb cb)
Definition: unix/stream.c:656
on_close
void on_close(uv_handle_t *handle)
Definition: libuv/docs/code/tcp-echo-server/main.c:28
write_req_t
Definition: worker.c:11
status
absl::Status status
Definition: rls.cc:251
echo_read
void echo_read(uv_stream_t *client, ssize_t nread, const uv_buf_t *buf)
Definition: libuv/docs/code/tcp-echo-server/main.c:39
uv_strerror
const UV_EXTERN char * uv_strerror(int err)
Definition: uv-common.c:212
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
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
ssize_t
intptr_t ssize_t
Definition: win.h:27
free_write_req
void free_write_req(uv_write_t *req)
Definition: libuv/docs/code/tcp-echo-server/main.c:17
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
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
uv_tcp_init
UV_EXTERN int uv_tcp_init(uv_loop_t *, uv_tcp_t *handle)
Definition: unix/tcp.c:143
DEFAULT_PORT
#define DEFAULT_PORT
Definition: libuv/docs/code/tcp-echo-server/main.c:6
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
server
Definition: examples/python/async_streaming/server.py:1
fix_build_deps.r
r
Definition: fix_build_deps.py:491
write_req_t::buf
uv_buf_t buf
Definition: worker.c:13
DEFAULT_BACKLOG
#define DEFAULT_BACKLOG
Definition: libuv/docs/code/tcp-echo-server/main.c:7
on_new_connection
void on_new_connection(uv_stream_t *server, int status)
Definition: libuv/docs/code/tcp-echo-server/main.c:55
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
loop
uv_loop_t * loop
Definition: libuv/docs/code/tcp-echo-server/main.c:9
main
int main()
Definition: libuv/docs/code/tcp-echo-server/main.c:72
echo_write
void echo_write(uv_write_t *req, int status)
Definition: libuv/docs/code/tcp-echo-server/main.c:32
uv_err_name
const UV_EXTERN char * uv_err_name(int err)
Definition: uv-common.c:189
addr
struct sockaddr_in addr
Definition: libuv/docs/code/tcp-echo-server/main.c:10


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