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/dk4sock10.ctr |
Initial commit
Diffstat (limited to 'support/dktools/dk4sock10.ctr')
-rw-r--r-- | support/dktools/dk4sock10.ctr | 133 |
1 files changed, 133 insertions, 0 deletions
diff --git a/support/dktools/dk4sock10.ctr b/support/dktools/dk4sock10.ctr new file mode 100644 index 0000000000..b7f58e8feb --- /dev/null +++ b/support/dktools/dk4sock10.ctr @@ -0,0 +1,133 @@ +%% options + +copyright owner = Dirk Krause +copyright year = 2015-xxxx +license = bsd + + +%% module + + +#include "dk4sock.h" + +#include <stdio.h> + +#if DK4_HAVE_ERRNO_H +#ifndef ERRNO_H_INCLUDED +#include <errno.h> +#define ERRNO_H_INCLUDED 1 +#endif +#endif + +#if DK4_HAVE_UNISTD_H +#ifndef UNISTD_H_INCLUDED +#include <unistd.h> +#define UNISTD_H_INCLUDED 1 +#endif +#endif + +#if DK4_HAVE_IO_H +#ifndef IO_H_INCLUDED +#include <io.h> +#define IO_H_INCLUDED 1 +#endif +#endif + +$!trace-include + + + +dk4_socket_t +dk4socket_open(int af, int tp, int pr, dk4_er_t *erp) +{ + dk4_socket_t back = INVALID_SOCKET; + $? "+ dk4socket_open" + switch (af) { + case AF_INET: +#if DK4_HAVE_STRUCT_SOCKADDR_IN6 + case AF_INET6: +#endif +#if defined(AF_UNIX) + case AF_UNIX: +#endif +#if defined(AF_LOCAL) && (AF_UNIX != AF_LOCAL) + case AF_LOCAL: +#endif + { + switch (tp) { + case SOCK_STREAM : case SOCK_DGRAM : { + dk4socket_error_reset(); + back = socket(af, tp, pr); + if (INVALID_SOCKET == back) { + dk4socket_error_report(erp, DK4_E_SOCKET_SOCKET); + } + } break; + default: { + dk4error_set_simple_error_code(erp, DK4_E_INVALID_ARGUMENTS); + $? "! tp" + } break; + } + } break; + default: { + dk4error_set_simple_error_code(erp, DK4_E_INVALID_ARGUMENTS); + $? "! af" + } break; + } + $? "- dk4socket_open %d", (int)back + return back; +} + + + +int +dk4socket_close(dk4_socket_t so, dk4_er_t *erp) +{ + int back = DK4_SOCKET_RESULT_FAILED; + + if (INVALID_SOCKET != so) { + dk4socket_error_reset(); +#if DK4_ON_WINDOWS + if (0 == closesocket(so)) +#else + if (0 == close(so)) +#endif + { + back = DK4_SOCKET_RESULT_SUCCESS; + } else { + dk4socket_error_report(erp, DK4_E_SOCKET_CLOSE); + } + } else { + dk4error_set_simple_error_code(erp, DK4_E_INVALID_ARGUMENTS); + } + return back; +} + + + +int +dk4socket_shutdown(dk4_socket_t so, int how, dk4_er_t *erp) +{ + int back = DK4_SOCKET_RESULT_FAILED; + if (INVALID_SOCKET != so) { + switch (how) { + case DK4_SOCKET_SHUT_READ : + case DK4_SOCKET_SHUT_WRITE : + case DK4_SOCKET_SHUT_RDWR : + { + dk4socket_error_reset(); + if (0 == shutdown(so, how)) { + back = DK4_SOCKET_RESULT_SUCCESS; + } else { + dk4socket_error_report(erp, DK4_E_SOCKET_SHUTDOWN); + } + } break; + default : { + dk4error_set_simple_error_code(erp, DK4_E_INVALID_ARGUMENTS); + } break; + } + } else { + dk4error_set_simple_error_code(erp, DK4_E_INVALID_ARGUMENTS); + } + return back; +} + |