13 #include <sys/types.h>
14 #include <sys/socket.h>
15 #if TIME_WITH_SYS_TIME
25 #include <netinet/in.h>
26 #include <arpa/inet.h>
40 #ifdef HAVE_SYS_SELECT_H
41 # include <sys/select.h>
44 #ifdef HAVE_SYS_SYSCTL_H
45 #ifdef HAVE_SYS_PARAM_H
46 # include <sys/param.h>
48 # include <sys/sysctl.h>
55 #ifdef HAVE_SYS_EVENT_H
56 # include <sys/event.h>
66 #ifdef HAVE_SYS_IOCTL_H
67 # include <sys/ioctl.h>
69 #ifdef HAVE_SYS_FILIO_H
70 # include <sys/filio.h>
72 #ifdef HAVE_SYS_SOCKIO_H
73 # include <sys/sockio.h>
80 #ifdef HAVE_NET_IF_DL_H
81 # include <net/if_dl.h>
84 #ifdef HAVE_NETINET_SCTP_H
85 #include <netinet/sctp.h>
92 #define recv(a,b,c,d) recvfrom(a,b,c,d,0,0)
93 #define send(a,b,c,d) sendto(a,b,c,d,0,0)
98 #define INADDR_NONE 0xffffffff
111 #ifndef INET_ADDRSTRLEN
113 #define INET_ADDRSTRLEN 16
119 #ifndef INET6_ADDRSTRLEN
121 #define INET6_ADDRSTRLEN 46
130 #define bzero(ptr,n) memset(ptr, 0, n)
136 #ifndef HAVE_GETHOSTBYNAME2
137 #define gethostbyname2(host,family) gethostbyname((host))
154 #define CMSG_LEN(size) (sizeof(struct cmsghdr) + (size))
158 #define CMSG_SPACE(size) (sizeof(struct cmsghdr) + (size))
166 # define SUN_LEN(su) \
167 (sizeof(*(su)) - sizeof((su)->sun_path) + strlen((su)->sun_path))
173 #define AF_LOCAL AF_UNIX
176 #define PF_LOCAL PF_UNIX
197 #define BUFFSIZE 8192
200 #define SERV_PORT 9877
201 #define SERV_PORT_STR "9877"
202 #define UNIXSTR_PATH "/tmp/unix.str"
203 #define UNIXDG_PATH "/tmp/unix.dg"
212 #define SA struct sockaddr
214 #ifndef HAVE_STRUCT_SOCKADDR_STORAGE
218 #define __SS_MAXSIZE 128
219 #define __SS_ALIGNSIZE (sizeof(int64_t))
220 #ifdef HAVE_SOCKADDR_SA_LEN
221 #define __SS_PAD1SIZE (__SS_ALIGNSIZE - sizeof(u_char) - sizeof(sa_family_t))
223 #define __SS_PAD1SIZE (__SS_ALIGNSIZE - sizeof(sa_family_t))
225 #define __SS_PAD2SIZE (__SS_MAXSIZE - 2*__SS_ALIGNSIZE)
227 struct sockaddr_storage {
228 #ifdef HAVE_SOCKADDR_SA_LEN
231 sa_family_t ss_family;
232 char __ss_pad1[__SS_PAD1SIZE];
234 char __ss_pad2[__SS_PAD2SIZE];
238 #define FILE_MODE (S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH)
240 #define DIR_MODE (FILE_MODE | S_IXUSR | S_IXGRP | S_IXOTH)
245 #define min(a,b) ((a) < (b) ? (a) : (b))
246 #define max(a,b) ((a) > (b) ? (a) : (b))
248 #ifndef HAVE_ADDRINFO_STRUCT
249 # include "../lib/addrinfo.h"
252 #ifndef HAVE_IF_NAMEINDEX_STRUCT
253 struct if_nameindex {
254 unsigned int if_index;
262 #ifndef HAVE_TIMESPEC_STRUCT
278 void dg_cli(FILE *,
int,
const SA *, socklen_t);
284 struct addrinfo *
host_serv(
const char *,
const char *,
int,
int);
291 ssize_t
readline(
int,
void *,
size_t);
292 ssize_t
readn(
int,
void *,
size_t);
293 ssize_t
read_fd(
int,
void *,
size_t,
int *);
310 int tcp_listen(
const char *,
const char *, socklen_t *);
311 void tv_sub(
struct timeval *,
struct timeval *);
312 int udp_client(
const char *,
const char *,
SA **, socklen_t *);
314 int udp_server(
const char *,
const char *, socklen_t *);
316 ssize_t
writen(
int,
const void *,
size_t);
317 ssize_t
write_fd(
int,
void *,
size_t,
int);
321 int mcast_join(
int,
const SA *, socklen_t,
const char *, u_int);
323 const SA *grp, socklen_t grplen);
325 const SA *grp, socklen_t grplen,
326 const char *ifname, u_int ifindex);
328 const SA *grp, socklen_t grplen);
330 const SA *grp, socklen_t grplen);
339 void Mcast_join(
int,
const SA *, socklen_t,
const char *, u_int);
341 const SA *grp, socklen_t grplen);
343 const SA *grp, socklen_t grplen,
344 const char *ifname, u_int ifindex);
346 const SA *grp, socklen_t grplen);
348 const SA *grp, socklen_t grplen);
359 #ifndef HAVE_GETADDRINFO_PROTO
360 int getaddrinfo(
const char *,
const char *,
const struct addrinfo *,
362 void freeaddrinfo(
struct addrinfo *);
363 char *gai_strerror(
int);
366 #ifndef HAVE_GETNAMEINFO_PROTO
367 int getnameinfo(
const SA *, socklen_t,
char *,
size_t,
char *,
size_t,
int);
370 #ifndef HAVE_GETHOSTNAME_PROTO
371 int gethostname(
char *,
int);
374 #ifndef HAVE_HSTRERROR_PROTO
375 const char *hstrerror(
int);
378 #ifndef HAVE_IF_NAMETOINDEX_PROTO
379 unsigned int if_nametoindex(
const char *);
380 char *if_indextoname(
unsigned int,
char *);
381 void if_freenameindex(
struct if_nameindex *);
382 struct if_nameindex *if_nameindex(
void);
385 #ifndef HAVE_INET_PTON_PROTO
386 int inet_pton(
int,
const char *,
void *);
387 const char *inet_ntop(
int,
const void *,
char *,
size_t);
390 #ifndef HAVE_INET_ATON_PROTO
391 int inet_aton(
const char *,
struct in_addr *);
394 #ifndef HAVE_PSELECT_PROTO
395 int pselect(
int, fd_set *, fd_set *, fd_set *,
396 const struct timespec *,
const sigset_t *);
399 #ifndef HAVE_SOCKATMARK_PROTO
403 #ifndef HAVE_SNPRINTF_PROTO
404 int snprintf(
char *,
size_t,
const char *, ...);
410 struct addrinfo *
Host_serv(
const char *,
const char *,
int,
int);
411 const char *
Inet_ntop(
int,
const void *,
char *,
size_t);
412 void Inet_pton(
int,
const char *,
void *);
417 ssize_t
Read_fd(
int,
void *,
size_t,
int *);
428 int Tcp_listen(
const char *,
const char *, socklen_t *);
429 int Udp_client(
const char *,
const char *,
SA **, socklen_t *);
431 int Udp_server(
const char *,
const char *, socklen_t *);
432 ssize_t
Write_fd(
int,
void *,
size_t,
int);
436 void *
Calloc(
size_t,
size_t);
439 int Fcntl(
int,
int,
int);
441 int Ioctl(
int,
int,
void *);
445 void *
Mmap(
void *,
size_t,
int,
int,
int, off_t);
446 int Open(
const char *,
int, mode_t);
448 ssize_t
Read(
int,
void *,
size_t);
455 void Sigprocmask(
int,
const sigset_t *, sigset_t *);
456 char *
Strdup(
const char *);
458 void Sysctl(
int *, u_int,
void *,
size_t *,
void *,
size_t);
459 void Unlink(
const char *);
461 pid_t
Waitpid(pid_t,
int *,
int);
462 void Write(
int,
void *,
size_t);
466 FILE *
Fdopen(
int,
const char *);
467 char *
Fgets(
char *,
int, FILE *);
468 FILE *
Fopen(
const char *,
const char *);
469 void Fputs(
const char *, FILE *);
473 void Bind(
int,
const SA *, socklen_t);
474 void Connect(
int,
const SA *, socklen_t);
477 void Getsockopt(
int,
int,
int,
void *, socklen_t *);
478 #ifdef HAVE_INET6_RTH_INIT
479 int Inet6_rth_space(
int,
int);
480 void *Inet6_rth_init(
void *, socklen_t,
int,
int);
481 void Inet6_rth_add(
void *,
const struct in6_addr *);
482 void Inet6_rth_reverse(
const void *,
void *);
483 int Inet6_rth_segments(
const void *);
484 struct in6_addr *Inet6_rth_getaddr(
const void *,
int);
488 int Kevent(
int,
const struct kevent *,
int,
489 struct kevent *,
int,
const struct timespec *);
493 int Poll(
struct pollfd *,
unsigned long,
int);
495 ssize_t
Readline(
int,
void *,
size_t);
496 ssize_t
Readn(
int,
void *,
size_t);
497 ssize_t
Recv(
int,
void *,
size_t,
int);
498 ssize_t
Recvfrom(
int,
void *,
size_t,
int,
SA *, socklen_t *);
499 ssize_t
Recvmsg(
int,
struct msghdr *,
int);
500 int Select(
int, fd_set *, fd_set *, fd_set *,
struct timeval *);
501 void Send(
int,
const void *,
size_t,
int);
502 void Sendto(
int,
const void *,
size_t,
int,
const SA *, socklen_t);
503 void Sendmsg(
int,
const struct msghdr *,
int);
504 void Setsockopt(
int,
int,
int,
const void *, socklen_t);
507 int Socket(
int,
int,
int);
509 void Writen(
int,
void *,
size_t);
512 void err_msg(
const char *, ...);
514 void err_ret(
const char *, ...);
515 void err_sys(
const char *, ...);
int sock_get_port(const SA *, socklen_t)
void Mcast_leave(int, const SA *, socklen_t)
ssize_t Recvfrom_flags(int, void *, size_t, int *, SA *, socklen_t *, struct unp_in_pktinfo *)
ssize_t Readn(int, void *, size_t)
Definition: readn.c:30
int mcast_set_loop(int, int)
ssize_t Recvfrom(int, void *, size_t, int, SA *, socklen_t *)
int mcast_block_source(int sockfd, const SA *src, socklen_t srclen, const SA *grp, socklen_t grplen)
void Close(int)
Definition: wrapunix.c:32
long Sysconf(int)
Definition: wrapunix.c:212
const char * Inet_ntop(int, const void *, char *, size_t)
Definition: wraplib.c:9
char * sock_ntop_host(const SA *, socklen_t)
void Listen(int, int)
Definition: wrapsock.c:166
void Write(int, void *, size_t)
Definition: wrapunix.c:260
pid_t Waitpid(pid_t, int *, int)
Definition: wrapunix.c:250
int mcast_join(int, const SA *, socklen_t, const char *, u_int)
int mcast_set_ttl(int, int)
void Fclose(FILE *)
Definition: wrapstdio.c:8
void sock_set_port(SA *, socklen_t, int)
void Sysctl(int *, u_int, void *, size_t *, void *, size_t)
Definition: wrapunix.c:224
int readable_timeo(int, int)
uint16_t in_cksum(uint16_t *, int)
void Mcast_set_if(int, const char *, u_int)
int udp_server(const char *, const char *, socklen_t *)
Definition: udp_server.c:5
int sock_bind_wild(int, int)
void Sendmsg(int, const struct msghdr *, int)
Definition: wrapsock.c:250
unsigned int If_nametoindex(const char *)
void * Mmap(void *, size_t, int, int, int, off_t)
Definition: wrapunix.c:113
int mcast_leave_source_group(int sockfd, const SA *src, socklen_t srclen, const SA *grp, socklen_t grplen)
void Pipe(int *fds)
Definition: wrapunix.c:133
char * Sock_ntop_host(const SA *, socklen_t)
pid_t Wait(int *)
Definition: wrapunix.c:240
int Mkstemp(char *)
Definition: wrapunix.c:94
int Poll(struct pollfd *, unsigned long, int)
Definition: wrapsock.c:181
ssize_t write_fd(int, void *, size_t, int)
void Sigemptyset(sigset_t *)
Definition: wrapunix.c:164
int sock_cmp_port(const SA *, const SA *, socklen_t)
void daemon_inetd(const char *, int)
ssize_t readline(int, void *, size_t)
Definition: readline.c:29
int Ioctl(int, int, void *)
Definition: wrapunix.c:64
ssize_t recvfrom_flags(int, void *, size_t, int *, SA *, socklen_t *, struct unp_in_pktinfo *)
void err_quit(const char *,...)
Definition: error.c:71
int ipi_ifindex
Definition: lunp.h:143
void inet6_srcrt_print(void *)
void * Malloc(size_t)
Definition: wrapunix.c:84
int udp_client(const char *, const char *, SA **, socklen_t *)
Definition: udp_client.c:5
int writable_timeo(int, int)
void heartbeat_cli(int, int, int)
int Fcntl(int, int, int)
Definition: wrapunix.c:46
struct addrinfo * Host_serv(const char *, const char *, int, int)
void err_ret(const char *,...)
Definition: error.c:14
void Shutdown(int, int)
Definition: wrapsock.c:271
int Socket(int, int, int)
Definition: wrapsock.c:289
void Getsockopt(int, int, int, void *, socklen_t *)
Definition: wrapsock.c:69
struct if_nameindex * If_nameindex(void)
ssize_t Write_fd(int, void *, size_t, int)
int Accept(int, SA *, socklen_t *)
ssize_t Recvmsg(int, struct msghdr *, int)
Definition: wrapsock.c:214
int Sockfd_to_family(int)
void Sigprocmask(int, const sigset_t *, sigset_t *)
Definition: wrapunix.c:195
void Getpeername(int, SA *, socklen_t *)
int Udp_server(const char *, const char *, socklen_t *)
Definition: udp_server.c:44
FILE * Fdopen(int, const char *)
Definition: wrapstdio.c:15
void sock_set_addr(SA *, socklen_t, const void *)
void Connect_timeo(int, const SA *, socklen_t, int)
int mcast_leave(int, const SA *, socklen_t)
int tcp_listen(const char *, const char *, socklen_t *)
Definition: tcp_listen.c:5
ssize_t read_fd(int, void *, size_t, int *)
void Sigfunc(int)
Definition: lunp.h:243
void Mcast_set_loop(int, int)
Sigfunc * signal_intr(int, Sigfunc *)
struct in_addr ipi_addr
Definition: lunp.h:142
void Sigfillset(sigset_t *)
Definition: wrapunix.c:171
void tv_sub(struct timeval *, struct timeval *)
int connect_nonb(int, const SA *, socklen_t, int)
void Dup2(int, int)
Definition: wrapunix.c:39
char * If_indextoname(unsigned int, char *)
int Sock_bind_wild(int, int)
int tcp_connect(const char *, const char *)
Definition: tcp_connect.c:5
void err_sys(const char *,...)
Definition: error.c:28
void Mcast_leave_source_group(int sockfd, const SA *src, socklen_t srclen, const SA *grp, socklen_t grplen)
char * Strdup(const char *)
Definition: wrapunix.c:202
void Mcast_unblock_source(int sockfd, const SA *src, socklen_t srclen, const SA *grp, socklen_t grplen)
void dg_echo(int, SA *, socklen_t)
char * sock_ntop(const SA *, socklen_t)
int Open(const char *, int, mode_t)
Definition: wrapunix.c:123
ssize_t writen(int, const void *, size_t)
Definition: writen.c:5
int Writable_timeo(int, int)
int daemon_init(const char *, int)
int inet_srcrt_add(char *)
void heartbeat_serv(int, int, int)
void Setsockopt(int, int, int, const void *, socklen_t)
Definition: wrapsock.c:264
void Mcast_join(int, const SA *, socklen_t, const char *, u_int)
void Connect(int, const SA *, socklen_t)
void Sendto(int, const void *, size_t, int, const SA *, socklen_t)
void Mcast_join_source_group(int sockfd, const SA *src, socklen_t srclen, const SA *grp, socklen_t grplen, const char *ifname, u_int ifindex)
ssize_t Recv(int, void *, size_t, int)
Definition: wrapsock.c:193
int sockfd_to_family(int)
int sock_cmp_addr(const SA *, const SA *, socklen_t)
int mcast_join_source_group(int sockfd, const SA *src, socklen_t srclen, const SA *grp, socklen_t grplen, const char *ifname, u_int ifindex)
void Socketpair(int, int, int, int *)
Definition: wrapsock.c:300
int Readable_timeo(int, int)
void Sigdelset(sigset_t *, int)
Definition: wrapunix.c:157
void Mcast_block_source(int sockfd, const SA *src, socklen_t srclen, const SA *grp, socklen_t grplen)
int Udp_connect(const char *, const char *)
void Gettimeofday(struct timeval *, void *)
Definition: wrapunix.c:56
void dg_cli(FILE *, int, const SA *, socklen_t)
struct addrinfo * host_serv(const char *, const char *, int, int)
char * Sock_ntop(const SA *, socklen_t)
int Select(int, fd_set *, fd_set *, fd_set *, struct timeval *)
Definition: wrapsock.c:224
ssize_t Read_fd(int, void *, size_t, int *)
void Fputs(const char *, FILE *)
Definition: wrapstdio.c:48
int Sockatmark(int)
Definition: wrapsock.c:278
void Writen(int, void *, size_t)
Definition: writen.c:29
void Sigpending(sigset_t *)
Definition: wrapunix.c:188
pid_t Fork(void)
Definition: wrapunix.c:74
FILE * Fopen(const char *, const char *)
Definition: wrapstdio.c:37
u_char * inet_srcrt_init(int)
ssize_t readn(int, void *, size_t)
Definition: readn.c:5
int mcast_unblock_source(int sockfd, const SA *src, socklen_t srclen, const SA *grp, socklen_t grplen)
void Bind(int, const SA *, socklen_t)
int Sigismember(const sigset_t *, int)
Definition: wrapunix.c:178
void Unlink(const char *)
Definition: wrapunix.c:233
void sock_set_wild(SA *, socklen_t)
int udp_connect(const char *, const char *)
Sigfunc * Signal_intr(int, Sigfunc *)
#define SA
Definition: lunp.h:212
void err_msg(const char *,...)
Definition: error.c:57
ssize_t Readline(int, void *, size_t)
Definition: readline.c:61
int Tcp_connect(const char *, const char *)
Definition: tcp_connect.c:46
void inet_srcrt_print(u_char *, int)
Sigfunc * Signal(int, Sigfunc *)
Definition: signal.c:28
void Inet_pton(int, const char *, void *)
Definition: wraplib.c:21
void str_cli(FILE *, int)
void Sigaddset(sigset_t *, int)
Definition: wrapunix.c:150
void Getsockname(int, SA *, socklen_t *)
ssize_t Read(int, void *, size_t)
Definition: wrapunix.c:140
void * Calloc(size_t, size_t)
Definition: wrapunix.c:22
int mcast_set_if(int, const char *, u_int)
int connect_timeo(int, const SA *, socklen_t, int)
void Mcast_set_ttl(int, int)
void err_dump(const char *,...)
Definition: error.c:42
void Send(int, const void *, size_t, int)
Definition: wrapsock.c:235
char * Fgets(char *, int, FILE *)
Definition: wrapstdio.c:26
int Tcp_listen(const char *, const char *, socklen_t *)
Definition: tcp_listen.c:54
int Udp_client(const char *, const char *, SA **, socklen_t *)
Definition: udp_client.c:39