size_t buffer_pop(struct Buffer *src, void *dst, size_t len) { size_t bytes; bytes = buffer_peek(src, dst, len); if (bytes > 0) advance_read_position(src, bytes); return bytes; }
/* * Write data to file from buffer */ ssize_t buffer_write(struct Buffer *buffer, int fd) { ssize_t bytes; struct iovec iov[2]; bytes = writev(fd, iov, setup_read_iov(buffer, iov, 0)); if (bytes > 0) advance_read_position(buffer, bytes); return bytes; }
ssize_t buffer_send(struct Buffer *buffer, int sockfd, int flags) { ssize_t bytes; struct iovec iov[2]; struct msghdr msg; msg.msg_name = NULL; msg.msg_namelen = 0; msg.msg_iov = iov; msg.msg_iovlen = setup_read_iov(buffer, iov, 0); msg.msg_control = NULL; msg.msg_controllen = 0; msg.msg_flags = 0; bytes = sendmsg(sockfd, &msg, flags); buffer->last_send = ev_now(EV_DEFAULT); if (bytes > 0) advance_read_position(buffer, bytes); return bytes; }
ssize_t buffer_send(struct Buffer *buffer, int sockfd, int flags) { ssize_t bytes; struct iovec iov[2]; struct msghdr msg; msg.msg_name = NULL; msg.msg_namelen = 0; msg.msg_iov = iov; msg.msg_iovlen = setup_read_iov(buffer, iov, 0); msg.msg_control = NULL; msg.msg_controllen = 0; msg.msg_flags = 0; bytes = sendmsg(sockfd, &msg, flags); if (clock_gettime(CLOCK_MONOTONIC, &buffer->last_send) < 0) err("clock_gettime() failed: %s", strerror(errno)); if (bytes > 0) advance_read_position(buffer, bytes); return bytes; }