Added a timeout watcher to TCP class - probably isn't working properly yet.
[ebb.git] / tcp.h
bloba58e194e8080348d7b3c07c1fc04ba11f2986d71
1 /* Evented TCP Server
2 * Copyright (c) 2007 Ry Dahl <ry.d4hl@gmail.com>
3 * This software is released under the "MIT License". See README file for details.
4 */
6 #ifndef tcp_h
7 #define tcp_h
9 #include <sys/socket.h>
10 #include <netinet/in.h>
11 #include <glib.h>
12 #include <ev.h>
14 typedef struct tcp_client tcp_client;
15 typedef struct tcp_server tcp_server;
18 #define TCP_LOG_DOMAIN "TCP"
19 #define tcp_error(str, ...) \
20 g_log(TCP_LOG_DOMAIN, G_LOG_LEVEL_ERROR, str, ## __VA_ARGS__);
21 #define tcp_warning(str, ...) \
22 g_log(TCP_LOG_DOMAIN, G_LOG_LEVEL_WARNING, str, ## __VA_ARGS__);
23 #define tcp_info(str, ...) \
24 g_log(TCP_LOG_DOMAIN, G_LOG_LEVEL_INFO, str, ## __VA_ARGS__);
26 #define TCP_COMMON \
27 int fd; \
28 struct sockaddr_in sockaddr; \
29 int open;
31 /*** TCP Server ***/
32 /* User is responsible for closing and freeing the tcp_client */
33 typedef void (*tcp_server_accept_cb_t) (tcp_client *, void *callback_data);
35 tcp_server* tcp_server_new();
36 void tcp_server_free(tcp_server*);
37 void tcp_server_close(tcp_server*);
38 void tcp_server_listen( tcp_server*
39 , char *address
40 , int port
41 , int backlog
42 , tcp_server_accept_cb_t
43 , void *accept_cb_data
45 char* tcp_server_address(tcp_server*);
47 struct tcp_server {
48 TCP_COMMON
49 struct hostent *dns_info;
50 char *port_s;
52 GQueue *clients;
54 void *accept_cb_data;
55 tcp_server_accept_cb_t accept_cb;
57 ev_io *accept_watcher;
58 struct ev_loop *loop;
61 /*** TCP Client ***/
62 typedef void (*tcp_client_read_cb_t)(char *buffer, int length, void *data);
64 void tcp_client_free(tcp_client *client);
65 void tcp_client_close(tcp_client*);
66 int tcp_client_write(tcp_client *, const char *data, int length);
68 struct tcp_client {
69 TCP_COMMON
71 tcp_server *parent;
73 void *read_cb_data;
74 tcp_client_read_cb_t read_cb;
75 char *read_buffer;
76 ev_io *read_watcher;
77 ev_timer *timeout_watcher;
80 #endif tcp_h