Compiles and passes some very simple unit tests.
[ebb.git] / evtcp_server.h
blobb758259c7d027860b9b4e914908c76ada16a7fbf
1 /*
2 * Copyright (c) 2007 Ry Dahl <ry.d4hl@gmail.com>
3 * All rights reserved.
4 */
6 #ifndef __EV_TCP_SOCKET_H_
7 #define __EV_TCP_SOCKET_H_
9 #include <sys/socket.h>
10 #include <netinet/in.h>
11 #include <glib.h>
12 #include <ev.h>
14 #define EV_TCP_WARNING 0 /* just a warning, tell the user */
15 #define EV_TCP_ERROR 1 /* an error, the operation cannot complete */
16 #define EV_TCP_FATAL 2 /* an error, the operation must be aborted */
17 typedef void (*ev_tcp_error_cb) (int severity, char *message);
19 typedef struct ev_tcp_client ev_tcp_client;
20 typedef struct ev_tcp_server ev_tcp_server;
22 #define EV_TCP_COMMON \
23 int fd; \
24 struct sockaddr_in sockaddr; \
25 int buf_size; \
26 ev_tcp_error_cb error_cb;
28 /*** TCP Server ***/
30 typedef void (*ev_tcp_server_accept_cb) (ev_tcp_server *, ev_tcp_client *);
32 ev_tcp_server* ev_tcp_server_new(ev_tcp_error_cb error_cb);
33 void ev_tcp_server_free(ev_tcp_server*);
34 void ev_tcp_server_close(ev_tcp_server*);
35 void ev_tcp_server_listen( ev_tcp_server*
36 , char *address
37 , int port
38 , int backlog
39 , ev_tcp_server_accept_cb
42 struct ev_tcp_server {
43 EV_TCP_COMMON
45 GQueue *children;
47 ev_tcp_server_accept_cb accept_cb;
48 ev_io *accept_watcher;
49 struct ev_loop *loop;
52 /*** TCP Client ***/
54 typedef void (*ev_tcp_client_read_cb)( ev_tcp_client*
55 , char *buffer
56 , int length
59 void ev_tcp_client_free(ev_tcp_client*);
60 void ev_tcp_client_close(ev_tcp_client*);
61 int ev_tcp_client_write(ev_tcp_client *, const char *data, int length);
63 struct ev_tcp_client {
64 EV_TCP_COMMON
66 ev_tcp_server *parent;
68 ev_tcp_client_read_cb read_cb;
69 ev_io *read_watcher;
72 #endif __EV_TCP_SOCKET_H_