1 /*
2 Copyright (C) 2015-2021, Dirk Krause
3 SPDX-License-Identifier: BSD-3-Clause
4 */
5
6 /*
7 WARNING: This file was generated by the dkct program (see
8 http://dktools.sourceforge.net/ for details).
9 Changes you make here will be lost if dkct is run again!
10 You should modify the original source and run dkct on it.
11 Original source: dk4sock10.ctr
12 */
13
14 /** @file dk4sock10.c The dk4sock10 module.
15 */
16
17
18
19 #include "dk4conf.h"
20 #include <libdk4sock/dk4sock.h>
21
22 #include <stdio.h>
23
24 #if DK4_HAVE_ERRNO_H
25 #ifndef ERRNO_H_INCLUDED
26 #include <errno.h>
27 #define ERRNO_H_INCLUDED 1
28 #endif
29 #endif
30
31 #if DK4_HAVE_UNISTD_H
32 #ifndef UNISTD_H_INCLUDED
33 #include <unistd.h>
34 #define UNISTD_H_INCLUDED 1
35 #endif
36 #endif
37
38 #if DK4_HAVE_IO_H
39 #ifndef IO_H_INCLUDED
40 #include <io.h>
41 #define IO_H_INCLUDED 1
42 #endif
43 #endif
44
45 #if DK4_HAVE_ASSERT_H
46 #ifndef ASSERT_H_INCLUDED
47 #include <assert.h>
48 #define ASSERT_H_INCLUDED 1
49 #endif
50 #endif
51
52
53
54
55
56
57 dk4_socket_t
dk4socket_open(int af,int tp,int pr,dk4_er_t * erp)58 dk4socket_open(int af, int tp, int pr, dk4_er_t *erp)
59 {
60 dk4_socket_t back = INVALID_SOCKET;
61
62 switch (af) {
63 case AF_INET:
64 #if DK4_HAVE_STRUCT_SOCKADDR_IN6
65 case AF_INET6:
66 #endif
67 #if defined(AF_UNIX)
68 case AF_UNIX:
69 #endif
70 #if defined(AF_LOCAL) && (AF_UNIX != AF_LOCAL)
71 case AF_LOCAL:
72 #endif
73 {
74 switch (tp) {
75 case SOCK_STREAM : case SOCK_DGRAM : {
76 dk4socket_error_reset();
77 back = socket(af, tp, pr);
78 if (INVALID_SOCKET == back) {
79 dk4socket_error_report(erp, DK4_E_SOCKET_SOCKET);
80 }
81 } break;
82 default: {
83 dk4error_set_simple_error_code(erp, DK4_E_INVALID_ARGUMENTS);
84
85 } break;
86 }
87 } break;
88 default: {
89 dk4error_set_simple_error_code(erp, DK4_E_INVALID_ARGUMENTS);
90
91 } break;
92 }
93
94 return back;
95 }
96
97
98
99 int
dk4socket_close(dk4_socket_t so,dk4_er_t * erp)100 dk4socket_close(dk4_socket_t so, dk4_er_t *erp)
101 {
102 int back = DK4_SOCKET_RESULT_FAILED;
103 #if DK4_USE_ASSERT
104 assert(INVALID_SOCKET != so);
105 #endif
106 if (INVALID_SOCKET != so) {
107 dk4socket_error_reset();
108 #if DK4_ON_WINDOWS
109 if (0 == closesocket(so))
110 #else
111 if (0 == close(so))
112 #endif
113 {
114 back = DK4_SOCKET_RESULT_SUCCESS;
115 } else {
116 dk4socket_error_report(erp, DK4_E_SOCKET_CLOSE);
117 }
118 } else {
119 dk4error_set_simple_error_code(erp, DK4_E_INVALID_ARGUMENTS);
120 }
121 return back;
122 }
123
124
125
126 int
dk4socket_shutdown(dk4_socket_t so,int how,dk4_er_t * erp)127 dk4socket_shutdown(dk4_socket_t so, int how, dk4_er_t *erp)
128 {
129 int back = DK4_SOCKET_RESULT_FAILED;
130 #if DK4_USE_ASSERT
131 assert(INVALID_SOCKET != so);
132 #endif
133 if (INVALID_SOCKET != so) {
134 switch (how) {
135 case DK4_SOCKET_SHUT_READ :
136 case DK4_SOCKET_SHUT_WRITE :
137 case DK4_SOCKET_SHUT_RDWR :
138 {
139 dk4socket_error_reset();
140 if (0 == shutdown(so, how)) {
141 back = DK4_SOCKET_RESULT_SUCCESS;
142 } else {
143 dk4socket_error_report(erp, DK4_E_SOCKET_SHUTDOWN);
144 }
145 } break;
146 default : {
147 dk4error_set_simple_error_code(erp, DK4_E_INVALID_ARGUMENTS);
148 } break;
149 }
150 } else {
151 dk4error_set_simple_error_code(erp, DK4_E_INVALID_ARGUMENTS);
152 }
153 return back;
154 }
155
156