@@ -35,19 +35,43 @@ Lightweight event-driven hello world TCP server
35
35
#include < stdlib.h>
36
36
#include " ../ev_tcp.h"
37
37
38
+ #define HOST "127.0.0.1"
39
+ #define PORT 5959
40
+ #define BACKLOG 128
41
+
42
+ static void on_close (ev_tcp_handle * client, int err) {
43
+ (void) client;
44
+ if (err == EV_TCP_SUCCESS)
45
+ printf("Connection closed\n");
46
+ else
47
+ printf("Connection closed: %s\n", ev_tcp_err(err));
48
+ free(client);
49
+ }
50
+
51
+ static void on_write(ev_tcp_handle * client) {
52
+ (void) client;
53
+ printf("Written response\n");
54
+ }
55
+
38
56
static void on_data(ev_tcp_handle * client) {
39
57
printf("Received %li bytes\n", client->buffer.size);
40
58
if (strncmp(client->buffer.buf, "quit", 4) == 0)
41
- ev_tcp_close_connection (client);
59
+ ev_tcp_close_handle (client);
42
60
else
43
- // If using TLS encryption
44
- // ev_tls_tcp_write(client);
45
- ev_tcp_write(client);
61
+ // Enqueue a write of the buffer content for the next loop cycle
62
+ ev_tcp_enqueue_write(client);
63
+ // If want to respond on the same loop cycle
64
+ // ev_tcp_write(client);
46
65
}
47
66
48
67
static void on_connection(ev_tcp_handle * server) {
49
68
ev_tcp_handle * client = malloc(sizeof(* client));
50
- iev_tcp_server_accept(server, client, on_data);
69
+ int err = ev_tcp_server_accept(server, client, on_data, on_write);
70
+ if (err < 0)
71
+ free(client);
72
+ else
73
+ ev_tcp_handle_set_on_close(client, on_close);
74
+
51
75
}
52
76
53
77
int main(void) {
@@ -63,7 +87,9 @@ int main(void) {
63
87
// };
64
88
// tls_opt.protocols = EV_TLSv1_2|EV_TLSv1_3;
65
89
// ev_tcp_server_set_tls(&server, &tls_opt);
66
- ev_tcp_server_listen(&server, "127.0.0.1", 5959, on_connection);
90
+ int err = ev_tcp_server_listen(&server, HOST, PORT, on_connection);
91
+ if (err < 0)
92
+ exit(EXIT_FAILURE);
67
93
// Blocking call
68
94
ev_tcp_server_run(&server);
69
95
// This could be registered to a SIGINT|SIGTERM signal notification
0 commit comments