src/server/util/io.c

changeset 80
0de4a90979e1
parent 71
069c152f6272
child 82
740cfd9dd443
equal deleted inserted replaced
79:f48cea237ec3 80:0de4a90979e1
45 45
46 IOStream native_io_funcs = { 46 IOStream native_io_funcs = {
47 system_write, 47 system_write,
48 system_writev, 48 system_writev,
49 system_read, 49 system_read,
50 NULL,
51 NULL,
50 NULL 52 NULL
51 }; 53 };
52 54
53 IOStream net_io_funcs = { 55 IOStream net_io_funcs = {
54 (io_write_f)net_stream_write, 56 (io_write_f)net_stream_write,
55 (io_writev_f)net_stream_writev, 57 (io_writev_f)net_stream_writev,
56 (io_read_f)net_stream_read, 58 (io_read_f)net_stream_read,
57 (io_sendfile_f)net_stream_sendfile 59 (io_sendfile_f)net_stream_sendfile,
60 (io_close_f)net_stream_close,
61 (io_finish_f)net_stream_finish
58 }; 62 };
59 63
60 64
61 IOStream* stream_new_from_fd(pool_handle_t *pool, int fd) { 65 IOStream* stream_new_from_fd(pool_handle_t *pool, int fd) {
62 SystemIOStream *st = pool_malloc(pool, sizeof(SystemIOStream)); 66 SystemIOStream *st = pool_malloc(pool, sizeof(SystemIOStream));
172 } 176 }
173 177
174 return ret; 178 return ret;
175 } 179 }
176 180
181 void net_stream_close(NetIOStream *st) {
182 close(st->fd);
183 }
184
185 void net_stream_finish(NetIOStream *st) {
186 if(st->chunked_enc) {
187 write(st->fd, "0\r\n\r\n", 5);
188 }
189 }
190
177 191
178 ssize_t net_read(SYS_NETFD fd, void *buf, size_t nbytes) { 192 ssize_t net_read(SYS_NETFD fd, void *buf, size_t nbytes) {
179 ssize_t r = ((IOStream*)fd)->read(fd, buf, nbytes); 193 ssize_t r = ((IOStream*)fd)->read(fd, buf, nbytes);
180 if(r == 0) { 194 if(r == 0) {
181 return IO_EOF; 195 return IO_EOF;
279 } 293 }
280 294
281 return sfd->hlen + sfd->len + sfd->tlen; 295 return sfd->hlen + sfd->len + sfd->tlen;
282 } 296 }
283 return IO_ERROR; 297 return IO_ERROR;
298 }
299
300 void net_close(SYS_NETFD fd) {
301 ((IOStream*)fd)->close(fd);
302 }
303
304 void net_finish(SYS_NETFD fd) {
305 ((IOStream*)fd)->finish(fd);
284 } 306 }
285 307
286 308
287 /* iovec buffer */ 309 /* iovec buffer */
288 iovec_buf_t *iovec_buf_create(pool_handle_t *pool) { 310 iovec_buf_t *iovec_buf_create(pool_handle_t *pool) {

mercurial