1/***********************************************************************
2*
3* event-tcp.h
4*
5* Event-driven TCP functions to allow for single-threaded "concurrent"
6* server.
7*
8* Copyright (C) 2001 Roaring Penguin Software Inc.
9*
10* $Id$
11*
12* This program may be distributed according to the terms of the GNU
13* General Public License, version 2 or (at your option) any later version.
14*
15* LIC: GPL
16*
17***********************************************************************/
18
19#ifndef INCLUDE_EVENT_TCP_H
20#define INCLUDE_EVENT_TCP_H 1
21
22#include "event.h"
23#include <sys/socket.h>
24
25typedef void (*EventTcpAcceptFunc)(EventSelector *es,
26				   int fd);
27
28typedef void (*EventTcpConnectFunc)(EventSelector *es,
29				    int fd,
30				    int flag,
31				    void *data);
32
33typedef void (*EventTcpIOFinishedFunc)(EventSelector *es,
34				       int fd,
35				       char *buf,
36				       int len,
37				       int flag,
38				       void *data);
39
40#define EVENT_TCP_FLAG_COMPLETE 0
41#define EVENT_TCP_FLAG_IOERROR  1
42#define EVENT_TCP_FLAG_EOF      2
43#define EVENT_TCP_FLAG_TIMEOUT  3
44
45typedef struct EventTcpState_t {
46    int socket;
47    char *buf;
48    char *cur;
49    int len;
50    int delim;
51    EventTcpIOFinishedFunc f;
52    EventSelector *es;
53    EventHandler *eh;
54    void *data;
55} EventTcpState;
56
57extern EventHandler *EventTcp_CreateAcceptor(EventSelector *es,
58					     int socket,
59					     EventTcpAcceptFunc f);
60
61extern void EventTcp_Connect(EventSelector *es,
62			     int fd,
63			     struct sockaddr const *addr,
64			     socklen_t addrlen,
65			     EventTcpConnectFunc f,
66			     int timeout,
67			     void *data);
68
69extern EventTcpState *EventTcp_ReadBuf(EventSelector *es,
70				       int socket,
71				       int len,
72				       int delim,
73				       EventTcpIOFinishedFunc f,
74				       int timeout,
75				       void *data);
76
77extern EventTcpState *EventTcp_WriteBuf(EventSelector *es,
78					int socket,
79					char *buf,
80					int len,
81					EventTcpIOFinishedFunc f,
82					int timeout,
83					void *data);
84
85extern void EventTcp_CancelPending(EventTcpState *s);
86
87#endif
88