src/server/util/io.h

branch
aio
changeset 172
5580517faafc
parent 147
d050449c3b9e
child 193
aa8393527b1e
equal deleted inserted replaced
170:711d00eeed25 172:5580517faafc
46 #define SYS_SOCKET int 46 #define SYS_SOCKET int
47 #elif defined(XP_WIN32) 47 #elif defined(XP_WIN32)
48 #define SYS_SOCKET SOCKET 48 #define SYS_SOCKET SOCKET
49 #endif 49 #endif
50 50
51 #define IO_MODE_BLOCKING 0
52 #define IO_MODE_NONBLOCKING 1
53
54 #define IO_POLL_NONE 0
55 #define IO_POLL_IN 1
56 #define IO_POLL_OUT 2
57
51 typedef struct IOStream IOStream; 58 typedef struct IOStream IOStream;
52 typedef struct SysStream SysStream; 59 typedef struct SysStream SysStream;
53 typedef struct HttpStream HttpStream; 60 typedef struct HttpStream HttpStream;
54 61
55 typedef ssize_t(*io_write_f)(IOStream *, void *, size_t); 62 typedef ssize_t(*io_write_f)(IOStream *, void *, size_t);
56 typedef ssize_t(*io_writev_f)(IOStream *, struct iovec *, int); 63 typedef ssize_t(*io_writev_f)(IOStream *, struct iovec *, int);
57 typedef ssize_t(*io_read_f)(IOStream *, void *, size_t); 64 typedef ssize_t(*io_read_f)(IOStream *, void *, size_t);
58 typedef ssize_t(*io_sendfile_f)(IOStream *, sendfiledata *); 65 typedef ssize_t(*io_sendfile_f)(IOStream *, sendfiledata *);
59 typedef void(*io_close_f)(IOStream *); 66 typedef void(*io_close_f)(IOStream *);
60 typedef void(*io_finish_f)(IOStream *); 67 typedef void(*io_finish_f)(IOStream *);
68 typedef void(*io_setmode_f)(IOStream *, int);
69 typedef int(*io_poll_f)(IOStream *, EventHandler *, int, Event *);
61 70
62 struct IOStream { 71 struct IOStream {
63 io_write_f write; 72 io_write_f write;
64 io_writev_f writev; 73 io_writev_f writev;
65 io_read_f read; 74 io_read_f read;
66 io_sendfile_f sendfile; 75 io_sendfile_f sendfile;
67 io_close_f close; 76 io_close_f close;
68 io_finish_f finish; 77 io_finish_f finish;
78 io_setmode_f setmode;
79 io_poll_f poll;
80 int io_errno;
69 }; 81 };
70 82
71 struct SysStream { 83 struct SysStream {
72 IOStream st; 84 IOStream st;
73 #ifdef XP_UNIX 85 #ifdef XP_UNIX
100 ssize_t net_sys_write(SysStream *st, void *buf, size_t nbytes); 112 ssize_t net_sys_write(SysStream *st, void *buf, size_t nbytes);
101 ssize_t net_sys_writev(SysStream *st, struct iovec *iovec, int iovcnt); 113 ssize_t net_sys_writev(SysStream *st, struct iovec *iovec, int iovcnt);
102 ssize_t net_sys_read(SysStream *st, void *buf, size_t nbytes); 114 ssize_t net_sys_read(SysStream *st, void *buf, size_t nbytes);
103 ssize_t net_sys_sendfile(SysStream *st, sendfiledata *sfd); 115 ssize_t net_sys_sendfile(SysStream *st, sendfiledata *sfd);
104 void net_sys_close(SysStream *st); 116 void net_sys_close(SysStream *st);
117 void net_sys_setmode(SysStream *st, int mode);
118 int net_sys_poll(SysStream *st, EventHandler *ev, int events, Event *cb);
105 119
106 /* http stream */ 120 /* http stream */
107 IOStream* httpstream_new(pool_handle_t *pool, IOStream *fd); 121 IOStream* httpstream_new(pool_handle_t *pool, IOStream *fd);
108 122
109 ssize_t net_http_write(HttpStream *st, void *buf, size_t nbytes); 123 ssize_t net_http_write(HttpStream *st, void *buf, size_t nbytes);
110 ssize_t net_http_writev(HttpStream *st, struct iovec *iovec, int iovcnt); 124 ssize_t net_http_writev(HttpStream *st, struct iovec *iovec, int iovcnt);
111 ssize_t net_http_read(HttpStream *st, void *buf, size_t nbytes); 125 ssize_t net_http_read(HttpStream *st, void *buf, size_t nbytes);
112 ssize_t net_http_sendfile(HttpStream *st, sendfiledata *sfd); 126 ssize_t net_http_sendfile(HttpStream *st, sendfiledata *sfd);
113 void net_http_close(HttpStream *st); 127 void net_http_close(HttpStream *st);
114 void net_http_finish(HttpStream *st); 128 void net_http_finish(HttpStream *st);
129 void net_http_setmode(HttpStream *st, int mode);
130 int net_http_poll(HttpStream *st, EventHandler *ev, int events, Event *cb);
115 131
116 /* ssl stream */ 132 /* ssl stream */
117 IOStream* sslstream_new(pool_handle_t *pool, SSL *ssl); 133 IOStream* sslstream_new(pool_handle_t *pool, SSL *ssl);
118 134
119 ssize_t net_ssl_write(SSLStream *st, void *buf, size_t nbytes); 135 ssize_t net_ssl_write(SSLStream *st, void *buf, size_t nbytes);
120 ssize_t net_ssl_writev(SSLStream *st, struct iovec *iovec, int iovcnt); 136 ssize_t net_ssl_writev(SSLStream *st, struct iovec *iovec, int iovcnt);
121 ssize_t net_ssl_read(SSLStream *st, void *buf, size_t nbytes); 137 ssize_t net_ssl_read(SSLStream *st, void *buf, size_t nbytes);
122 void net_ssl_close(SSLStream *st); 138 void net_ssl_close(SSLStream *st);
123 void net_ssl_finish(SSLStream *st); 139 void net_ssl_finish(SSLStream *st);
140 void net_ssl_setmode(SSLStream *st, int mode);
141 int net_ssl_poll(SSLStream *st, EventHandler *ev, int events, Event *cb);
124 142
125 /* net_ functions */ 143 /* net_ functions */
126 ssize_t net_fallback_sendfile(IOStream *fd, sendfiledata *sfd); 144 ssize_t net_fallback_sendfile(IOStream *fd, sendfiledata *sfd);
127 void net_finish(SYS_NETFD fd); 145 void net_finish(SYS_NETFD fd);
128 146

mercurial