summaryrefslogtreecommitdiff
path: root/support/dktools/dk4sock01.ctr
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /support/dktools/dk4sock01.ctr
Initial commit
Diffstat (limited to 'support/dktools/dk4sock01.ctr')
-rw-r--r--support/dktools/dk4sock01.ctr140
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
+