This file contains pipe service functions. More...
#include "config.h"
#include "util/tube.h"
#include "util/log.h"
#include "util/net_help.h"
#include "util/netevent.h"
#include "util/fptr_wlist.h"
#include "util/ub_event.h"
Macros | |
#define | socketpair(f, t, p, sv) pipe(sv) |
no socketpair() available, like on Minix 3.1.7, use pipe | |
Functions | |
struct tube * | tube_create (void) |
Create a pipe. More... | |
void | tube_delete (struct tube *tube) |
Delete and destroy a pipe. More... | |
void | tube_close_read (struct tube *tube) |
Close read part of the pipe. More... | |
void | tube_close_write (struct tube *tube) |
Close write part of the pipe. More... | |
void | tube_remove_bg_listen (struct tube *tube) |
Remove bg listen setup from event base. More... | |
void | tube_remove_bg_write (struct tube *tube) |
Remove bg write setup from event base. More... | |
int | tube_handle_listen (struct comm_point *c, void *arg, int error, struct comm_reply *ATTR_UNUSED(reply_info)) |
int | tube_handle_write (struct comm_point *c, void *arg, int error, struct comm_reply *ATTR_UNUSED(reply_info)) |
int | tube_write_msg (struct tube *tube, uint8_t *buf, uint32_t len, int nonblock) |
Write length bytes followed by message. More... | |
int | tube_read_msg (struct tube *tube, uint8_t **buf, uint32_t *len, int nonblock) |
Read length bytes followed by message. More... | |
static int | pollit (int fd, struct timeval *t) |
perform poll() on the fd | |
int | tube_poll (struct tube *tube) |
See if data is ready for reading on the tube without blocking. More... | |
int | tube_wait (struct tube *tube) |
Wait for data to be ready for reading on the tube. More... | |
int | tube_wait_timeout (struct tube *tube, int msec) |
Wait for data to be ready with a timeout. More... | |
int | tube_read_fd (struct tube *tube) |
Get FD that is readable when new information arrives. More... | |
int | tube_setup_bg_listen (struct tube *tube, struct comm_base *base, tube_callback_type *cb, void *arg) |
Start listening for information over the pipe. More... | |
int | tube_setup_bg_write (struct tube *tube, struct comm_base *base) |
Start background write handler for the pipe. More... | |
int | tube_queue_item (struct tube *tube, uint8_t *msg, size_t len) |
Append data item to background list of writes. More... | |
void | tube_handle_signal (int ATTR_UNUSED(fd), short ATTR_UNUSED(events), void *ATTR_UNUSED(arg)) |
This file contains pipe service functions.
struct tube* tube_create | ( | void | ) |
Create a pipe.
References fd_set_nonblock(), log_err(), socketpair, tube::sr, tube::sw, and tube_delete().
Referenced by ub_ctx_create(), and worker_create().
void tube_delete | ( | struct tube * | tube | ) |
Delete and destroy a pipe.
tube | to delete |
References tube_close_read(), tube_close_write(), tube_remove_bg_listen(), and tube_remove_bg_write().
Referenced by tube_create(), ub_ctx_create(), worker_create(), and worker_delete().
void tube_close_read | ( | struct tube * | tube | ) |
Close read part of the pipe.
The tube can no longer be read from.
tube | tube to operate on. |
References tube::sr.
Referenced by daemon_start_others(), libworker_dobg(), and tube_delete().
void tube_close_write | ( | struct tube * | tube | ) |
Close write part of the pipe.
The tube can no longer be written to.
tube | tube to operate on. |
References tube::sw.
Referenced by libworker_dobg(), thread_start(), and tube_delete().
void tube_remove_bg_listen | ( | struct tube * | tube | ) |
Remove bg listen setup from event base.
tube | what tube to cleanup |
References tube::cmd_msg, comm_point_delete(), and tube::listen_com.
Referenced by libworker_dobg(), and tube_delete().
void tube_remove_bg_write | ( | struct tube * | tube | ) |
Remove bg write setup from event base.
tube | what tube to cleanup |
References tube_res_list::buf, comm_point_delete(), tube_res_list::next, tube::res_com, tube::res_last, and tube::res_list.
Referenced by libworker_dobg(), and tube_delete().
int tube_write_msg | ( | struct tube * | tube, |
uint8_t * | buf, | ||
uint32_t | len, | ||
int | nonblock | ||
) |
Write length bytes followed by message.
tube | the tube to write on. If that tube is a pipe, its write fd is used as the socket to write on. Is nonblocking. Set to blocking by the function, and back to non-blocking at exit of function. |
buf | the message. |
len | length of message. |
nonblock | if set to true, the first write is nonblocking. If the first write fails the function returns -1. If set false, the first write is blocking. |
References tube_res_list::buf, fd_set_block(), fd_set_nonblock(), tube_res_list::len, log_err(), and tube::sw.
Referenced by distribute_cmd(), libworker_dobg(), server_stats_reply(), ub_cancel(), ub_resolve_async(), ub_stop_bg(), and worker_send_cmd().
int tube_read_msg | ( | struct tube * | tube, |
uint8_t ** | buf, | ||
uint32_t * | len, | ||
int | nonblock | ||
) |
Read length bytes followed by message.
tube | The tube to read on. If that tube is a pipe, its read fd is used as the socket to read on. Is nonblocking. Set to blocking by the function, and back to non-blocking at exit of function. |
buf | the message, malloced. |
len | length of message, returned. |
nonblock | if set to true, the first read is nonblocking. If the first read fails the function returns -1. If set false, the first read is blocking. |
References tube_res_list::buf, fd_set_block(), fd_set_nonblock(), tube_res_list::len, log_err(), and tube::sr.
Referenced by daemon_remote_exec(), server_stats_obtain(), ub_process(), ub_stop_bg(), and ub_wait().
int tube_poll | ( | struct tube * | tube | ) |
int tube_wait | ( | struct tube * | tube | ) |
int tube_wait_timeout | ( | struct tube * | tube, |
int | msec | ||
) |
Wait for data to be ready with a timeout.
tube | the tube to wait on. |
msec | timeout in milliseconds. |
References tube::sr.
Referenced by server_stats_obtain().
int tube_read_fd | ( | struct tube * | tube | ) |
int tube_setup_bg_listen | ( | struct tube * | tube, |
struct comm_base * | base, | ||
tube_callback_type * | cb, | ||
void * | arg | ||
) |
Start listening for information over the pipe.
Background registration of a read listener, callback when read completed. Do not mix with tube_read_msg style direct reads from the pipe.
tube | tube to listen on |
base | what base to register event callback. |
cb | callback routine. |
arg | user argument for callback routine. |
References tube::listen_arg, tube::listen_cb, and tube::listen_com.
Referenced by libworker_dobg().
Start background write handler for the pipe.
Do not mix with tube_write_msg style direct writes to the pipe.
tube | tube to write on |
base | what base to register event handler on. |
References tube::res_com.
Referenced by libworker_dobg().
int tube_queue_item | ( | struct tube * | tube, |
uint8_t * | msg, | ||
size_t | len | ||
) |
Append data item to background list of writes.
Mallocs a list entry behind the scenes. Not locked behind the scenes, call from one thread or lock on outside.
tube | what tube to queue on. |
msg | memory message to send. Is free()d after use. Put at the end of the to-send queue. |
len | length of item. |
References tube_res_list::buf, tube_res_list::len, log_err(), tube_res_list::next, tube::res_com, tube::res_last, and tube::res_list.
Referenced by add_bg_result().