diff options
author | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
commit | e0c6872cf40896c7be36b11dcc744620f10adf1d (patch) | |
tree | 60335e10d2f4354b0674ec22d7b53f0f8abee672 /support/dktools/dk4sock01.ctr |
Initial commit
Diffstat (limited to 'support/dktools/dk4sock01.ctr')
-rw-r--r-- | support/dktools/dk4sock01.ctr | 140 |
1 files changed, 140 insertions, 0 deletions
diff --git a/support/dktools/dk4sock01.ctr b/support/dktools/dk4sock01.ctr new file mode 100644 index 0000000000..8811430e69 --- /dev/null +++ b/support/dktools/dk4sock01.ctr @@ -0,0 +1,140 @@ +%% options + +copyright owner = Dirk Krause +copyright year = 2015-xxxx +license = bsd + + + +%% module + +#include "dk4sock.h" + +#if DK4_HAVE_ERRNO_H +#ifndef ERRNO_H_INCLUDED +#include <errno.h> +#define ERRNO_H_INCLUDED 1 +#endif +#endif + + + +$!trace-include + + + +void +dk4socket_error_reset(void) +{ +#if DK4_ON_WINDOWS + WSASetLastError(0); +#else + errno = 0; + h_errno = 0; +#endif +} + + + +int +dk4socket_error_get(void) +{ +#if DK4_ON_WINDOWS + return (WSAGetLastError()); +#else + return (errno); +#endif +} + + + +void +dk4socket_error_report(dk4_er_t *erp, int ec) +{ +#if DK4_ON_WINDOWS + dk4error_set_idetails(erp, ec, WSAGetLastError()); +#else + switch (ec) { + case DK4_E_SOCKET_GETHOSTBYNAME : { + dk4error_set_idetails(erp, ec, h_errno); + } break; + default : { + dk4error_set_idetails(erp, ec, errno); + } break; + } +#endif +} + + +void +dk4socket_debug_address(const char *text, struct sockaddr *addr, size_t sz) +{ +#if TRACE_DEBUG + FILE *fipo; + struct sockaddr_in *soin; + unsigned long ul; + unsigned short us; + fipo = dktrace_file(); + if (NULL != fipo) { + if (NULL != text) { + fputs(text, fipo); + fputc('\n', fipo); + } + switch (addr->sa_family) { + case AF_INET : { + fputs("Address family: AF_INET\n", fipo); + soin = (struct sockaddr_in *)addr; + ul = soin->sin_addr.s_addr; + us = soin->sin_port; + ul = ntohl(ul); + us = ntohs(us); + fprintf( + fipo, + "%lu.%lu.%lu.%lu:%u\n", + ((ul >> 24) & 0x000000FFUL), + ((ul >> 16) & 0x000000FFUL), + ((ul >> 8) & 0x000000FFUL), + (ul & 0x000000FFUL), + (unsigned)us + ); + } break; + case AF_INET6 : { + fputs("Address family: AF_INET6\n", fipo); + } break; + case AF_UNIX : { + fputs("Address family: AF_UNIX\n", fipo); + } break; + default : { + fputs("Address family: !UNKNOWN!\n", fipo); + } break; + } + } +#endif +} + + + +#if (DK4_HAVE_SETSOCKOPT) && defined(SOL_SOCKET) && defined(SO_ERROR) + +int +dk4socket_non_null_getsockopt(int optval, socklen_t slo) +{ + unsigned char *ptr; + socklen_t i; + socklen_t max; + int back = 0; + $? "+ dk4socket_non_null_getsockopt %d %d", optval, (int)slo + max = sizeof(int); + if (slo < max) { max = slo; } + ptr = (unsigned char *)(&optval); + for (i = 0; ((0 == back) && (i < max)); i++) { + if (0x00 != *(ptr++)) { + back = 1; + } + } + $? "- dk4socket_non_null_getsockopt %d", back + return back; +} + +#endif + |