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