From e557bab0dcaf35f003fa755b74e4c80000e05e42 Mon Sep 17 00:00:00 2001 From: Laurent Bercot Date: Wed, 9 Dec 2020 17:16:40 +0000 Subject: Get rid of webipc.h and DJBUNIX_FLAG_* Decent semantic header separation is hard. It's always an ongoing process. Here socket.h always included webipc.h for listen(), and webipc.h always included djbunix.h for socket_internal() and socketpair_internal(). That's ugh. Just move all the socket stuff into one socket header. Of course, djbunix.h is still needed most of the time for fd_close() and other operations on fds, but those are generic anyway. Also, O_CLOEXEC exists everywhere now, so we can use it as well as O_NONBLOCK instead of redefining the flags in djbunix.h. --- src/include/skalibs/djbunix.h | 12 ++---- src/include/skalibs/socket.h | 95 +++++++++++++++++++++++++++++++++---------- src/include/skalibs/stddjb.h | 1 - src/include/skalibs/webipc.h | 63 ---------------------------- 4 files changed, 77 insertions(+), 94 deletions(-) delete mode 100644 src/include/skalibs/webipc.h (limited to 'src/include') diff --git a/src/include/skalibs/djbunix.h b/src/include/skalibs/djbunix.h index 1f356e1..d0775fe 100644 --- a/src/include/skalibs/djbunix.h +++ b/src/include/skalibs/djbunix.h @@ -6,21 +6,19 @@ #include #include #include +#include #include #include -#define DJBUNIX_FLAG_NB 0x01U -#define DJBUNIX_FLAG_COE 0x02U - extern int coe (int) ; extern int uncoe (int) ; extern int ndelay_on (int) ; extern int ndelay_off (int) ; extern int pipe_internal (int *, unsigned int) ; -#define pipenb(p) pipe_internal(p, DJBUNIX_FLAG_NB) -#define pipecoe(p) pipe_internal(p, DJBUNIX_FLAG_COE) -#define pipenbcoe(p) pipe_internal(p, DJBUNIX_FLAG_NB|DJBUNIX_FLAG_COE) +#define pipenb(p) pipe_internal(p, O_NONBLOCK) +#define pipecoe(p) pipe_internal(p, O_CLOEXEC) +#define pipenbcoe(p) pipe_internal(p, O_NONBLOCK|O_CLOEXEC) extern int fd_copy (int, int) ; extern int fd_copy2 (int, int, int, int) ; extern int fd_move (int, int) ; @@ -57,8 +55,6 @@ extern int open_trunc (char const *) ; extern int openc_trunc (char const *) ; extern int open_write (char const *) ; extern int openc_write (char const *) ; -extern int socket_internal (int, int, int, unsigned int) ; -extern int socketpair_internal (int, int, int, unsigned int, int *) ; extern size_t path_canonicalize (char *, char const *, int) ; diff --git a/src/include/skalibs/socket.h b/src/include/skalibs/socket.h index 11ad1db..a114f29 100644 --- a/src/include/skalibs/socket.h +++ b/src/include/skalibs/socket.h @@ -3,18 +3,69 @@ #ifndef SOCKET_H #define SOCKET_H -#include +#include #include +#include + #include +#include #include -#include -#include typedef ssize_t socket_io_func_t (int, char *, size_t, char *, uint16_t *) ; typedef socket_io_func_t *socket_io_func_t_ref ; +extern int socket_internal (int, int, int, unsigned int) ; +extern int socketpair_internal (int, int, int, unsigned int, int *) ; + + + /* UNIX domain sockets */ + +#define IPCPATH_MAX 107 + +#define ipc_stream() ipc_stream_nb() +#define ipc_stream_b() ipc_stream_internal(0) +#define ipc_stream_nb() ipc_stream_internal(O_NONBLOCK) +#define ipc_stream_coe() ipc_stream_internal(O_CLOEXEC) +#define ipc_stream_nbcoe() ipc_stream_internal(O_NONBLOCK|O_CLOEXEC) +extern int ipc_stream_internal (unsigned int) ; + +#define ipc_datagram() ipc_datagram_nb() +#define ipc_datagram_b() ipc_datagram_internal(0) +#define ipc_datagram_nb() ipc_datagram_internal(O_NONBLOCK) +#define ipc_datagram_coe() ipc_datagram_internal(O_CLOEXEC) +#define ipc_datagram_nbcoe() ipc_datagram_internal(O_NONBLOCK|O_CLOEXEC) +extern int ipc_datagram_internal (unsigned int) ; + +#define ipc_pair(sv) ipc_pair_nb(sv) +#define ipc_pair_b(sv) ipc_pair_internal((sv), 0) +#define ipc_pair_nb(sv) ipc_pair_internal((sv), O_NONBLOCK) +#define ipc_pair_coe(sv) ipc_pair_internal((sv), O_CLOEXEC) +#define ipc_pair_nbcoe(sv) ipc_pair_internal((sv), O_NONBLOCK|O_CLOEXEC) +extern int ipc_pair_internal (int *, unsigned int) ; + +extern int ipc_bind (int, char const *) ; +extern int ipc_bind_reuse (int, char const *) ; +extern int ipc_bind_reuse_lock (int, char const *, int *) ; +extern int ipc_listen (int, int) ; + +#define ipc_accept(s, path, len, trunc) ipc_accept_internal(s, path, len, (trunc), 0) +#define ipc_accept_nb(s, path, len, trunc) ipc_accept_internal(s, path, len, (trunc), O_NONBLOCK) +#define ipc_accept_coe(s, path, len, trunc) ipc_accept_internal(s, path, len, (trunc), O_CLOEXEC) +#define ipc_accept_nbcoe(s, path, len, trunc) ipc_accept_internal(s, path, len, (trunc), O_NONBLOCK|O_CLOEXEC) +extern int ipc_accept_internal (int, char *, size_t, int *, unsigned int) ; + +extern int ipc_local (int, char *, size_t, int *) ; + +extern int ipc_connect (int, char const *) ; +extern int ipc_connected (int) ; +extern int ipc_timed_connect (int, char const *, tain_t const *, tain_t *) ; +#define ipc_timed_connect_g(fd, path, deadline) ipc_timed_connect(fd, path, (deadline), &STAMP) + +extern ssize_t ipc_send (int, char const *, size_t, char const *) ; +extern ssize_t ipc_recv (int, char *, size_t, char *) ; + - /* INET and INET6 domain socket operations */ + /* INET and INET6 domain sockets */ #define socket_tcp() socket_tcp4() #define socket_tcp_b() socket_tcp4_b() @@ -24,16 +75,16 @@ typedef socket_io_func_t *socket_io_func_t_ref ; #define socket_tcp4() socket_tcp4_nb() #define socket_tcp4_b() socket_tcp4_internal(0) -#define socket_tcp4_nb() socket_tcp4_internal(DJBUNIX_FLAG_NB) -#define socket_tcp4_coe() socket_tcp4_internal(DJBUNIX_FLAG_COE) -#define socket_tcp4_nbcoe() socket_tcp4_internal(DJBUNIX_FLAG_NB|DJBUNIX_FLAG_COE) +#define socket_tcp4_nb() socket_tcp4_internal(O_NONBLOCK) +#define socket_tcp4_coe() socket_tcp4_internal(O_CLOEXEC) +#define socket_tcp4_nbcoe() socket_tcp4_internal(O_NONBLOCK|O_CLOEXEC) extern int socket_tcp4_internal (unsigned int) ; #define socket_tcp6() socket_tcp6_nb() #define socket_tcp6_b() socket_tcp6_internal(0) -#define socket_tcp6_nb() socket_tcp6_internal(DJBUNIX_FLAG_NB) -#define socket_tcp6_coe() socket_tcp6_internal(DJBUNIX_FLAG_COE) -#define socket_tcp6_nbcoe() socket_tcp6_internal(DJBUNIX_FLAG_NB|DJBUNIX_FLAG_COE) +#define socket_tcp6_nb() socket_tcp6_internal(O_NONBLOCK) +#define socket_tcp6_coe() socket_tcp6_internal(O_CLOEXEC) +#define socket_tcp6_nbcoe() socket_tcp6_internal(O_NONBLOCK|O_CLOEXEC) extern int socket_tcp6_internal (unsigned int) ; #define socket_udp() socket_udp4() @@ -44,16 +95,16 @@ extern int socket_tcp6_internal (unsigned int) ; #define socket_udp4() socket_udp4_nb() #define socket_udp4_b() socket_udp4_internal(0) -#define socket_udp4_nb() socket_udp4_internal(DJBUNIX_FLAG_NB) -#define socket_udp4_coe() socket_udp4_internal(DJBUNIX_FLAG_COE) -#define socket_udp4_nbcoe() socket_udp4_internal(DJBUNIX_FLAG_NB|DJBUNIX_FLAG_COE) +#define socket_udp4_nb() socket_udp4_internal(O_NONBLOCK) +#define socket_udp4_coe() socket_udp4_internal(O_CLOEXEC) +#define socket_udp4_nbcoe() socket_udp4_internal(O_NONBLOCK|O_CLOEXEC) extern int socket_udp4_internal (unsigned int) ; #define socket_udp6() socket_udp6_nb() #define socket_udp6_b() socket_udp6_internal(0) -#define socket_udp6_nb() socket_udp6_internal(DJBUNIX_FLAG_NB) -#define socket_udp6_coe() socket_udp6_internal(DJBUNIX_FLAG_COE) -#define socket_udp6_nbcoe() socket_udp6_internal(DJBUNIX_FLAG_NB|DJBUNIX_FLAG_COE) +#define socket_udp6_nb() socket_udp6_internal(O_NONBLOCK) +#define socket_udp6_coe() socket_udp6_internal(O_CLOEXEC) +#define socket_udp6_nbcoe() socket_udp6_internal(O_NONBLOCK|O_CLOEXEC) extern int socket_udp6_internal (unsigned int) ; extern int socket_waitconn (int, tain_t const *, tain_t *) ; @@ -79,9 +130,9 @@ extern int socket_bind6 (int, char const *, uint16_t) ; extern int socket_bind6_reuse (int, char const *, uint16_t) ; #define socket_accept4(s, ip, port) socket_accept4_internal(s, ip, (port), 0) -#define socket_accept4_nb(s, ip, port) socket_accept4_internal(s, ip, (port), DJBUNIX_FLAG_NB) -#define socket_accept4_coe(s, ip, port) socket_accept4_internal(s, ip, (port), DJBUNIX_FLAG_COE) -#define socket_accept4_nbcoe(s, ip, port) socket_accept4_internal(s, ip, (port), DJBUNIX_FLAG_NB|DJBUNIX_FLAG_COE) +#define socket_accept4_nb(s, ip, port) socket_accept4_internal(s, ip, (port), O_NONBLOCK) +#define socket_accept4_coe(s, ip, port) socket_accept4_internal(s, ip, (port), O_CLOEXEC) +#define socket_accept4_nbcoe(s, ip, port) socket_accept4_internal(s, ip, (port), O_NONBLOCK|O_CLOEXEC) extern int socket_accept4_internal (int, char *, uint16_t *, unsigned int) ; extern socket_io_func_t socket_recv4 ; extern ssize_t socket_send4 (int, char const *, size_t, char const *, uint16_t) ; @@ -90,9 +141,9 @@ extern int socket_local4 (int, char *, uint16_t *) ; extern int socket_remote4 (int, char *, uint16_t *) ; #define socket_accept6(s, ip6, port) socket_accept6_internal(s, ip6, (port), 0) -#define socket_accept6_nb(s, ip6, port) socket_accept6_internal(s, ip6, (port), DJBUNIX_FLAG_NB) -#define socket_accept6_coe(s, ip6, port) socket_accept6_internal(s, ip6, (port), DJBUNIX_FLAG_COE) -#define socket_accept6_nbcoe(s, ip6, port) socket_accept6_internal(s, ip6, (port), DJBUNIX_FLAG_NB|DJBUNIX_FLAG_COE) +#define socket_accept6_nb(s, ip6, port) socket_accept6_internal(s, ip6, (port), O_NONBLOCK) +#define socket_accept6_coe(s, ip6, port) socket_accept6_internal(s, ip6, (port), O_CLOEXEC) +#define socket_accept6_nbcoe(s, ip6, port) socket_accept6_internal(s, ip6, (port), O_NONBLOCK|O_CLOEXEC) extern int socket_accept6_internal (int, char *, uint16_t *, unsigned int) ; extern socket_io_func_t socket_recv6 ; extern ssize_t socket_send6 (int, char const *, size_t, char const *, uint16_t) ; diff --git a/src/include/skalibs/stddjb.h b/src/include/skalibs/stddjb.h index 071c913..b15bff3 100644 --- a/src/include/skalibs/stddjb.h +++ b/src/include/skalibs/stddjb.h @@ -51,6 +51,5 @@ #include #include #include -#include #endif diff --git a/src/include/skalibs/webipc.h b/src/include/skalibs/webipc.h deleted file mode 100644 index 2a7e95e..0000000 --- a/src/include/skalibs/webipc.h +++ /dev/null @@ -1,63 +0,0 @@ -/* ISC license. */ - -#ifndef WEBIPC_H -#define WEBIPC_H - - /* - UNIX domain socket functions. - "web" stands for William E. Baxter, the original author, who kindly - permitted me to modify and release his code as a part of skalibs. - It has nothing to do with the World Wide Web. - */ - -#define IPCPATH_MAX 107 - -#include -#include -#include -#include - -#define ipc_stream() ipc_stream_nb() -#define ipc_stream_b() ipc_stream_internal(0) -#define ipc_stream_nb() ipc_stream_internal(DJBUNIX_FLAG_NB) -#define ipc_stream_coe() ipc_stream_internal(DJBUNIX_FLAG_COE) -#define ipc_stream_nbcoe() ipc_stream_internal(DJBUNIX_FLAG_NB|DJBUNIX_FLAG_COE) -extern int ipc_stream_internal (unsigned int) ; - -#define ipc_datagram() ipc_datagram_nb() -#define ipc_datagram_b() ipc_datagram_internal(0) -#define ipc_datagram_nb() ipc_datagram_internal(DJBUNIX_FLAG_NB) -#define ipc_datagram_coe() ipc_datagram_internal(DJBUNIX_FLAG_COE) -#define ipc_datagram_nbcoe() ipc_datagram_internal(DJBUNIX_FLAG_NB|DJBUNIX_FLAG_COE) -extern int ipc_datagram_internal (unsigned int) ; - -#define ipc_pair(sv) ipc_pair_nb(sv) -#define ipc_pair_b(sv) ipc_pair_internal((sv), 0) -#define ipc_pair_nb(sv) ipc_pair_internal((sv), DJBUNIX_FLAG_NB) -#define ipc_pair_coe(sv) ipc_pair_internal((sv), DJBUNIX_FLAG_COE) -#define ipc_pair_nbcoe(sv) ipc_pair_internal((sv), DJBUNIX_FLAG_NB|DJBUNIX_FLAG_COE) -extern int ipc_pair_internal (int *, unsigned int) ; - -extern int ipc_bind (int, char const *) ; -extern int ipc_bind_reuse (int, char const *) ; -extern int ipc_bind_reuse_lock (int, char const *, int *) ; -extern int ipc_listen (int, int) ; - -#define ipc_accept(s, path, len, trunc) ipc_accept_internal(s, path, len, (trunc), 0) -#define ipc_accept_nb(s, path, len, trunc) ipc_accept_internal(s, path, len, (trunc), DJBUNIX_FLAG_NB) -#define ipc_accept_coe(s, path, len, trunc) ipc_accept_internal(s, path, len, (trunc), DJBUNIX_FLAG_COE) -#define ipc_accept_nbcoe(s, path, len, trunc) ipc_accept_internal(s, path, len, (trunc), DJBUNIX_FLAG_NB|DJBUNIX_FLAG_COE) -extern int ipc_accept_internal (int, char *, size_t, int *, unsigned int) ; - -#define ipc_eid getpeereid -extern int ipc_local (int, char *, size_t, int *) ; - -extern int ipc_connect (int, char const *) ; -extern int ipc_connected (int) ; -extern int ipc_timed_connect (int, char const *, tain_t const *, tain_t *) ; -#define ipc_timed_connect_g(fd, path, deadline) ipc_timed_connect(fd, path, (deadline), &STAMP) - -extern ssize_t ipc_send (int, char const *, size_t, char const *) ; -extern ssize_t ipc_recv (int, char *, size_t, char *) ; - -#endif -- cgit v1.2.3