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