compiles
[ebb.git] / tcp_server.h
blob69fe83c07f8baab65d52db729fafd86682bdb399
1 /*
2 * Copyright (c) 2007 Ryan Dahl <ry.d4hl@gmail.com>
3 * All rights reserved.
4 */
6 #ifndef _TCP_SERVER_H_
7 #define _TCP_SERVER_H_
9 #include "tcp_server.h"
10 #include <glib.h>
11 #include <ev.h>
13 typedef struct evtcp_socket evtcp_socket;
15 /*** TCP Server ***/
16 typedef void (*evtcp_connection_cb) (evtcp_server *parent, evtcp_client *new_client);
17 typedef struct evtcp_server {
18 int max_clients;
19 int client_timeout;
21 /* private */
22 /* called for each client that connects */
23 evtcp_connection_cb connection_cb;
24 evtcp_socket *socket;
25 struct ev_loop *loop;
26 struct ev_io *watcher;
27 evtcp_error_cb error_cb;
28 GQueue *clients;
29 } evtcp_server;
31 evtcp_server* evtcp_server_new(tcp_error_cb);
32 void evtcp_server_free(evtcp_server*);
33 void evtcp_server_bind(evtcp_server*, char *address, int port, evtcp_connection_cb);
35 /*** TCP Server Client ***/
36 typedef void (*evtcp_read_cb)(evtcp_client*, char *buffer, size_t length);
37 typedef struct evtcp_client {
38 evtcp_server *parent; /* ro */
39 /* called each time there is data to read */
40 evtcp_read_cb read_cb; /* rw */
42 /* private */
43 bool closed;
44 evtcp_socket *socket;
45 struct ev_io *io_event;
46 evtcp_error_cb error_cb;
47 char *write_buffer;
48 size_t write_buffer_length;
49 } evtcp_client;
50 /* returns the total number of bytes buffered after this write */
51 size_t evtcp_client_write(evtcp_client_t *, char *data, size_t length);
52 void evtcp_client_close(evtcp_client*);
54 #endif _TCP_SERVER_H_