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; |