Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- static void ioset_read_to_recvq(struct io_fd *fd)
- {
- ssize_t res;
- size_t put_avail;
- struct ioq *recv = &fd->recv;
- put_avail = ioq_put_avail(recv);
- if (!put_avail)
- put_avail = ioq_expand(recv);
- res = read(fd->fd, recv->buf + recv->put, put_avail);
- if (res < 0) {
- if (errno != EAGAIN) {
- printf("read() error on socket fd %d: %s\n", fd->fd,
- strerror(errno));
- fd->state = IO_CLOSED;
- fd->read_cb(&fd);
- if (fd) ioset_shutdown(&fd, IOFD_CLOSE);
- }
- } else if (!res) {
- fd->state = IO_CLOSED;
- fd->read_cb(&fd);
- if (fd) ioset_shutdown(&fd, IOFD_CLOSE);
- } else {
- if (!fd->line_len) {
- size_t pos;
- for (pos=recv->put; pos < recv->put+res; ++pos) {
- if (recv->buf[pos] == '\n') {
- if (recv->put < recv->get) {
- fd->line_len = recv->size + pos + 1 - recv->get;
- } else {
- fd->line_len = pos + 1 - recv->get;
- }
- break;
- }
- }
- recv->put += res;
- if (recv->put == recv->size)
- recv->put = 0;
- while (fd->line_len > 0) {
- fd->read_cb(&fd);
- if (fd) {
- ioset_find_line_length(fd);
- } else {
- break;
- }
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement