X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=lib%2Fsocket-util.h;h=a0e7970acaa51c1a7eefd0ab3bcf0ac65e264a7b;hb=62827e6abef5844d61f2f57d9a643c0ffb092210;hp=4a1df12e9567add33687c5a4fc5c2d85a082135c;hpb=5ca92d1d5dc0d8dba9ed554444cd0ae00a43209f;p=sliver-openvswitch.git diff --git a/lib/socket-util.h b/lib/socket-util.h index 4a1df12e9..a0e7970ac 100644 --- a/lib/socket-util.h +++ b/lib/socket-util.h @@ -26,6 +26,8 @@ #include int set_nonblocking(int fd); +void xset_nonblocking(int fd); + int get_max_fds(void); int lookup_ip(const char *host_name, struct in_addr *address); @@ -69,4 +71,28 @@ char *describe_fd(int fd); * in is used. */ #define DSCP_DEFAULT (IPTOS_PREC_INTERNETCONTROL >> 2) +/* Maximum number of fds that we support sending or receiving at one time + * across a Unix domain socket. */ +#define SOUTIL_MAX_FDS 8 + +/* Iovecs. */ +size_t iovec_len(const struct iovec *iovs, size_t n_iovs); +bool iovec_is_empty(const struct iovec *iovs, size_t n_iovs); + +/* Functions particularly useful for Unix domain sockets. */ +void xsocketpair(int domain, int type, int protocol, int fds[2]); +int send_iovec_and_fds(int sock, + const struct iovec *iovs, size_t n_iovs, + const int fds[], size_t n_fds); +int send_iovec_and_fds_fully(int sock, + const struct iovec *iovs, size_t n_iovs, + const int fds[], size_t n_fds, + size_t skip_bytes, size_t *bytes_sent); +int send_iovec_and_fds_fully_block(int sock, + const struct iovec *iovs, size_t n_iovs, + const int fds[], size_t n_fds); +int recv_data_and_fds(int sock, + void *data, size_t size, + int fds[SOUTIL_MAX_FDS], size_t *n_fdsp); + #endif /* socket-util.h */