예제 #1
0
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;
}
예제 #2
0
/*
 * 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;
}
예제 #3
0
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;
}
예제 #4
0
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;
}