libuv/docs/code/dns/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 
7 
8 void alloc_buffer(uv_handle_t *handle, size_t suggested_size, uv_buf_t *buf) {
9  buf->base = malloc(suggested_size);
10  buf->len = suggested_size;
11 }
12 
13 void on_read(uv_stream_t *client, ssize_t nread, const uv_buf_t *buf) {
14  if (nread < 0) {
15  if (nread != UV_EOF)
16  fprintf(stderr, "Read error %s\n", uv_err_name(nread));
17  uv_close((uv_handle_t*) client, NULL);
18  free(buf->base);
19  free(client);
20  return;
21  }
22 
23  char *data = (char*) malloc(sizeof(char) * (nread+1));
24  data[nread] = '\0';
25  strncpy(data, buf->base, nread);
26 
27  fprintf(stderr, "%s", data);
28  free(data);
29  free(buf->base);
30 }
31 
33  if (status < 0) {
34  fprintf(stderr, "connect failed error %s\n", uv_err_name(status));
35  free(req);
36  return;
37  }
38 
40  free(req);
41 }
42 
43 void on_resolved(uv_getaddrinfo_t *resolver, int status, struct addrinfo *res) {
44  if (status < 0) {
45  fprintf(stderr, "getaddrinfo callback error %s\n", uv_err_name(status));
46  return;
47  }
48 
49  char addr[17] = {'\0'};
50  uv_ip4_name((struct sockaddr_in*) res->ai_addr, addr, 16);
51  fprintf(stderr, "%s\n", addr);
52 
53  uv_connect_t *connect_req = (uv_connect_t*) malloc(sizeof(uv_connect_t));
54  uv_tcp_t *socket = (uv_tcp_t*) malloc(sizeof(uv_tcp_t));
56 
57  uv_tcp_connect(connect_req, socket, (const struct sockaddr*) res->ai_addr, on_connect);
58 
59  uv_freeaddrinfo(res);
60 }
61 
62 int main() {
64 
65  struct addrinfo hints;
66  hints.ai_family = PF_INET;
67  hints.ai_socktype = SOCK_STREAM;
68  hints.ai_protocol = IPPROTO_TCP;
69  hints.ai_flags = 0;
70 
71  uv_getaddrinfo_t resolver;
72  fprintf(stderr, "irc.freenode.net is... ");
73  int r = uv_getaddrinfo(loop, &resolver, on_resolved, "irc.freenode.net", "6667", &hints);
74 
75  if (r) {
76  fprintf(stderr, "getaddrinfo call error %s\n", uv_err_name(r));
77  return 1;
78  }
79  return uv_run(loop, UV_RUN_DEFAULT);
80 }
loop
uv_loop_t * loop
Definition: libuv/docs/code/dns/main.c:6
uv_connect_s
Definition: uv.h:580
client
Definition: examples/python/async_streaming/client.py:1
uv_getaddrinfo_s
Definition: uv.h:871
string.h
buf
voidpf void * buf
Definition: bloaty/third_party/zlib/contrib/minizip/ioapi.h:136
uv_connect_s::handle
uv_stream_t * handle
Definition: uv.h:583
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
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
on_resolved
void on_resolved(uv_getaddrinfo_t *resolver, int status, struct addrinfo *res)
Definition: libuv/docs/code/dns/main.c:43
uv_stream_s
Definition: uv.h:491
main
int main()
Definition: libuv/docs/code/dns/main.c:62
uv_tcp_connect
UV_EXTERN int uv_tcp_connect(uv_connect_t *req, uv_tcp_t *handle, const struct sockaddr *addr, uv_connect_cb cb)
Definition: uv-common.c:315
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
req
static uv_connect_t req
Definition: test-connection-fail.c:30
UV_RUN_DEFAULT
@ UV_RUN_DEFAULT
Definition: uv.h:254
alloc_buffer
void alloc_buffer(uv_handle_t *handle, size_t suggested_size, uv_buf_t *buf)
Definition: libuv/docs/code/dns/main.c:8
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
addrinfo::ai_addr
struct sockaddr * ai_addr
Definition: ares_ipv6.h:51
uv_tcp_init
UV_EXTERN int uv_tcp_init(uv_loop_t *, uv_tcp_t *handle)
Definition: unix/tcp.c:143
data
char data[kBufferLength]
Definition: abseil-cpp/absl/strings/internal/str_format/float_conversion.cc:1006
addrinfo::ai_family
int ai_family
Definition: ares_ipv6.h:46
uv_ip4_name
UV_EXTERN int uv_ip4_name(const struct sockaddr_in *src, char *dst, size_t size)
Definition: uv-common.c:267
uv_tcp_s
Definition: uv.h:544
on_connect
void on_connect(uv_connect_t *req, int status)
Definition: libuv/docs/code/dns/main.c:32
addrinfo::ai_protocol
int ai_protocol
Definition: ares_ipv6.h:48
uv_freeaddrinfo
UV_EXTERN void uv_freeaddrinfo(struct addrinfo *ai)
Definition: unix/getaddrinfo.c:223
uv.h
uv_buf_t
Definition: unix.h:121
connect_req
static uv_connect_t connect_req
Definition: benchmark-tcp-write-batch.c:39
fix_build_deps.r
r
Definition: fix_build_deps.py:491
addrinfo::ai_socktype
int ai_socktype
Definition: ares_ipv6.h:47
addrinfo::ai_flags
int ai_flags
Definition: ares_ipv6.h:45
uv_getaddrinfo
UV_EXTERN int uv_getaddrinfo(uv_loop_t *loop, uv_getaddrinfo_t *req, uv_getaddrinfo_cb getaddrinfo_cb, const char *node, const char *service, const struct addrinfo *hints)
Definition: unix/getaddrinfo.c:141
on_read
void on_read(uv_stream_t *client, ssize_t nread, const uv_buf_t *buf)
Definition: libuv/docs/code/dns/main.c:13
handle
static csh handle
Definition: test_arm_regression.c:16
uv_handle_s
Definition: uv.h:441
test_server.socket
socket
Definition: test_server.py:65
uv_loop_s
Definition: uv.h:1767
uv_err_name
const UV_EXTERN char * uv_err_name(int err)
Definition: uv-common.c:189
addrinfo
Definition: ares_ipv6.h:43
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