xref: /freebsd/crypto/openssl/include/internal/sockets.h (revision e71b70530d95c4f34d8bdbd78d1242df1ba4a945)
1*e71b7053SJung-uk Kim /*
2*e71b7053SJung-uk Kim  * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved.
3*e71b7053SJung-uk Kim  *
4*e71b7053SJung-uk Kim  * Licensed under the OpenSSL license (the "License").  You may not use
5*e71b7053SJung-uk Kim  * this file except in compliance with the License.  You can obtain a copy
6*e71b7053SJung-uk Kim  * in the file LICENSE in the source distribution or at
7*e71b7053SJung-uk Kim  * https://www.openssl.org/source/license.html
8*e71b7053SJung-uk Kim  */
9*e71b7053SJung-uk Kim 
10*e71b7053SJung-uk Kim 
11*e71b7053SJung-uk Kim #ifndef HEADER_INTERNAL_SOCKETS
12*e71b7053SJung-uk Kim # define HEADER_INTERNAL_SOCKETS
13*e71b7053SJung-uk Kim 
14*e71b7053SJung-uk Kim # if defined(OPENSSL_SYS_VXWORKS) || defined(OPENSSL_SYS_UEFI)
15*e71b7053SJung-uk Kim #  define NO_SYS_PARAM_H
16*e71b7053SJung-uk Kim # endif
17*e71b7053SJung-uk Kim # ifdef WIN32
18*e71b7053SJung-uk Kim #  define NO_SYS_UN_H
19*e71b7053SJung-uk Kim # endif
20*e71b7053SJung-uk Kim # ifdef OPENSSL_SYS_VMS
21*e71b7053SJung-uk Kim #  define NO_SYS_PARAM_H
22*e71b7053SJung-uk Kim #  define NO_SYS_UN_H
23*e71b7053SJung-uk Kim # endif
24*e71b7053SJung-uk Kim 
25*e71b7053SJung-uk Kim # ifdef OPENSSL_NO_SOCK
26*e71b7053SJung-uk Kim 
27*e71b7053SJung-uk Kim # elif defined(OPENSSL_SYS_WINDOWS) || defined(OPENSSL_SYS_MSDOS)
28*e71b7053SJung-uk Kim #  if defined(__DJGPP__)
29*e71b7053SJung-uk Kim #   include <sys/socket.h>
30*e71b7053SJung-uk Kim #   include <sys/un.h>
31*e71b7053SJung-uk Kim #   include <tcp.h>
32*e71b7053SJung-uk Kim #   include <netdb.h>
33*e71b7053SJung-uk Kim #  elif defined(_WIN32_WCE) && _WIN32_WCE<410
34*e71b7053SJung-uk Kim #   define getservbyname _masked_declaration_getservbyname
35*e71b7053SJung-uk Kim #  endif
36*e71b7053SJung-uk Kim #  if !defined(IPPROTO_IP)
37*e71b7053SJung-uk Kim     /* winsock[2].h was included already? */
38*e71b7053SJung-uk Kim #   include <winsock.h>
39*e71b7053SJung-uk Kim #  endif
40*e71b7053SJung-uk Kim #  ifdef getservbyname
41*e71b7053SJung-uk Kim      /* this is used to be wcecompat/include/winsock_extras.h */
42*e71b7053SJung-uk Kim #   undef getservbyname
43*e71b7053SJung-uk Kim struct servent *PASCAL getservbyname(const char *, const char *);
44*e71b7053SJung-uk Kim #  endif
45*e71b7053SJung-uk Kim 
46*e71b7053SJung-uk Kim #  ifdef _WIN64
47*e71b7053SJung-uk Kim /*
48*e71b7053SJung-uk Kim  * Even though sizeof(SOCKET) is 8, it's safe to cast it to int, because
49*e71b7053SJung-uk Kim  * the value constitutes an index in per-process table of limited size
50*e71b7053SJung-uk Kim  * and not a real pointer. And we also depend on fact that all processors
51*e71b7053SJung-uk Kim  * Windows run on happen to be two's-complement, which allows to
52*e71b7053SJung-uk Kim  * interchange INVALID_SOCKET and -1.
53*e71b7053SJung-uk Kim  */
54*e71b7053SJung-uk Kim #   define socket(d,t,p)   ((int)socket(d,t,p))
55*e71b7053SJung-uk Kim #   define accept(s,f,l)   ((int)accept(s,f,l))
56*e71b7053SJung-uk Kim #  endif
57*e71b7053SJung-uk Kim 
58*e71b7053SJung-uk Kim # else
59*e71b7053SJung-uk Kim 
60*e71b7053SJung-uk Kim #  ifndef NO_SYS_PARAM_H
61*e71b7053SJung-uk Kim #   include <sys/param.h>
62*e71b7053SJung-uk Kim #  endif
63*e71b7053SJung-uk Kim #  ifdef OPENSSL_SYS_VXWORKS
64*e71b7053SJung-uk Kim #   include <time.h>
65*e71b7053SJung-uk Kim #  endif
66*e71b7053SJung-uk Kim 
67*e71b7053SJung-uk Kim #  include <netdb.h>
68*e71b7053SJung-uk Kim #  if defined(OPENSSL_SYS_VMS_NODECC)
69*e71b7053SJung-uk Kim #   include <socket.h>
70*e71b7053SJung-uk Kim #   include <in.h>
71*e71b7053SJung-uk Kim #   include <inet.h>
72*e71b7053SJung-uk Kim #  else
73*e71b7053SJung-uk Kim #   include <sys/socket.h>
74*e71b7053SJung-uk Kim #   ifndef NO_SYS_UN_H
75*e71b7053SJung-uk Kim #    ifdef OPENSSL_SYS_VXWORKS
76*e71b7053SJung-uk Kim #     include <streams/un.h>
77*e71b7053SJung-uk Kim #    else
78*e71b7053SJung-uk Kim #     include <sys/un.h>
79*e71b7053SJung-uk Kim #    endif
80*e71b7053SJung-uk Kim #    ifndef UNIX_PATH_MAX
81*e71b7053SJung-uk Kim #     define UNIX_PATH_MAX sizeof(((struct sockaddr_un *)NULL)->sun_path)
82*e71b7053SJung-uk Kim #    endif
83*e71b7053SJung-uk Kim #   endif
84*e71b7053SJung-uk Kim #   ifdef FILIO_H
85*e71b7053SJung-uk Kim #    include <sys/filio.h> /* FIONBIO in some SVR4, e.g. unixware, solaris */
86*e71b7053SJung-uk Kim #   endif
87*e71b7053SJung-uk Kim #   include <netinet/in.h>
88*e71b7053SJung-uk Kim #   include <arpa/inet.h>
89*e71b7053SJung-uk Kim #   include <netinet/tcp.h>
90*e71b7053SJung-uk Kim #  endif
91*e71b7053SJung-uk Kim 
92*e71b7053SJung-uk Kim #  ifdef OPENSSL_SYS_AIX
93*e71b7053SJung-uk Kim #   include <sys/select.h>
94*e71b7053SJung-uk Kim #  endif
95*e71b7053SJung-uk Kim 
96*e71b7053SJung-uk Kim #  ifndef VMS
97*e71b7053SJung-uk Kim #   include <sys/ioctl.h>
98*e71b7053SJung-uk Kim #  else
99*e71b7053SJung-uk Kim #   if !defined(TCPIP_TYPE_SOCKETSHR) && defined(__VMS_VER) && (__VMS_VER > 70000000)
100*e71b7053SJung-uk Kim      /* ioctl is only in VMS > 7.0 and when socketshr is not used */
101*e71b7053SJung-uk Kim #    include <sys/ioctl.h>
102*e71b7053SJung-uk Kim #   endif
103*e71b7053SJung-uk Kim #   include <unixio.h>
104*e71b7053SJung-uk Kim #   if defined(TCPIP_TYPE_SOCKETSHR)
105*e71b7053SJung-uk Kim #    include <socketshr.h>
106*e71b7053SJung-uk Kim #   endif
107*e71b7053SJung-uk Kim #  endif
108*e71b7053SJung-uk Kim 
109*e71b7053SJung-uk Kim #  ifndef INVALID_SOCKET
110*e71b7053SJung-uk Kim #   define INVALID_SOCKET      (-1)
111*e71b7053SJung-uk Kim #  endif
112*e71b7053SJung-uk Kim # endif
113*e71b7053SJung-uk Kim 
114*e71b7053SJung-uk Kim /*
115*e71b7053SJung-uk Kim  * Some IPv6 implementations are broken, you can disable them in known
116*e71b7053SJung-uk Kim  * bad versions.
117*e71b7053SJung-uk Kim  */
118*e71b7053SJung-uk Kim # if !defined(OPENSSL_USE_IPV6)
119*e71b7053SJung-uk Kim #  if defined(AF_INET6)
120*e71b7053SJung-uk Kim #   define OPENSSL_USE_IPV6 1
121*e71b7053SJung-uk Kim #  else
122*e71b7053SJung-uk Kim #   define OPENSSL_USE_IPV6 0
123*e71b7053SJung-uk Kim #  endif
124*e71b7053SJung-uk Kim # endif
125*e71b7053SJung-uk Kim 
126*e71b7053SJung-uk Kim # define get_last_socket_error() errno
127*e71b7053SJung-uk Kim # define clear_socket_error()    errno=0
128*e71b7053SJung-uk Kim 
129*e71b7053SJung-uk Kim # if defined(OPENSSL_SYS_WINDOWS)
130*e71b7053SJung-uk Kim #  undef get_last_socket_error
131*e71b7053SJung-uk Kim #  undef clear_socket_error
132*e71b7053SJung-uk Kim #  define get_last_socket_error() WSAGetLastError()
133*e71b7053SJung-uk Kim #  define clear_socket_error()    WSASetLastError(0)
134*e71b7053SJung-uk Kim #  define readsocket(s,b,n)       recv((s),(b),(n),0)
135*e71b7053SJung-uk Kim #  define writesocket(s,b,n)      send((s),(b),(n),0)
136*e71b7053SJung-uk Kim # elif defined(__DJGPP__)
137*e71b7053SJung-uk Kim #  define WATT32
138*e71b7053SJung-uk Kim #  define WATT32_NO_OLDIES
139*e71b7053SJung-uk Kim #  define closesocket(s)          close_s(s)
140*e71b7053SJung-uk Kim #  define readsocket(s,b,n)       read_s(s,b,n)
141*e71b7053SJung-uk Kim #  define writesocket(s,b,n)      send(s,b,n,0)
142*e71b7053SJung-uk Kim # elif defined(OPENSSL_SYS_VMS)
143*e71b7053SJung-uk Kim #  define ioctlsocket(a,b,c)      ioctl(a,b,c)
144*e71b7053SJung-uk Kim #  define closesocket(s)          close(s)
145*e71b7053SJung-uk Kim #  define readsocket(s,b,n)       recv((s),(b),(n),0)
146*e71b7053SJung-uk Kim #  define writesocket(s,b,n)      send((s),(b),(n),0)
147*e71b7053SJung-uk Kim # elif defined(OPENSSL_SYS_VXWORKS)
148*e71b7053SJung-uk Kim #  define ioctlsocket(a,b,c)          ioctl((a),(b),(int)(c))
149*e71b7053SJung-uk Kim #  define closesocket(s)              close(s)
150*e71b7053SJung-uk Kim #  define readsocket(s,b,n)           read((s),(b),(n))
151*e71b7053SJung-uk Kim #  define writesocket(s,b,n)          write((s),(char *)(b),(n))
152*e71b7053SJung-uk Kim # else
153*e71b7053SJung-uk Kim #  define ioctlsocket(a,b,c)      ioctl(a,b,c)
154*e71b7053SJung-uk Kim #  define closesocket(s)          close(s)
155*e71b7053SJung-uk Kim #  define readsocket(s,b,n)       read((s),(b),(n))
156*e71b7053SJung-uk Kim #  define writesocket(s,b,n)      write((s),(b),(n))
157*e71b7053SJung-uk Kim # endif
158*e71b7053SJung-uk Kim 
159*e71b7053SJung-uk Kim #endif
160