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 49struct 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