add BIO_socket_wait(), BIO_wait(), and BIO_connect_retry() improving timeout support
[openssl.git] / include / internal / sockets.h
index c64e74cb50ae950ae18f003d88d4c1c978c86c3a..97ae2f6dcdd2f9fcf04d0decec5164a59ed22e49 100644 (file)
@@ -1,33 +1,49 @@
 /*
- * Copyright 1995-2017 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved.
  *
- * Licensed under the OpenSSL license (the "License").  You may not use
+ * Licensed under the Apache License 2.0 (the "License").  You may not use
  * this file except in compliance with the License.  You can obtain a copy
  * in the file LICENSE in the source distribution or at
  * https://www.openssl.org/source/license.html
  */
 
 
-#ifndef HEADER_OPENSSL_SOCKETS
+#ifndef OSSL_INTERNAL_SOCKETS_H
+# define OSSL_INTERNAL_SOCKETS_H
+
+# if defined(OPENSSL_SYS_VXWORKS) || defined(OPENSSL_SYS_UEFI)
+#  define NO_SYS_PARAM_H
+# endif
+# ifdef WIN32
+#  define NO_SYS_UN_H
+# endif
+# ifdef OPENSSL_SYS_VMS
+#  define NO_SYS_PARAM_H
+#  define NO_SYS_UN_H
+# endif
 
 # ifdef OPENSSL_NO_SOCK
 
 # elif defined(OPENSSL_SYS_WINDOWS) || defined(OPENSSL_SYS_MSDOS)
-#  if !defined(__DJGPP__)
-#   if defined(_WIN32_WCE) && _WIN32_WCE<410
-#    define getservbyname _masked_declaration_getservbyname
-#   endif
-#   if !defined(IPPROTO_IP)
-     /* winsock[2].h was included already? */
-#    include <winsock.h>
-#   endif
-#   ifdef getservbyname
+#  if defined(__DJGPP__)
+#   include <sys/socket.h>
+#   include <sys/un.h>
+#   include <tcp.h>
+#   include <netdb.h>
+#  elif defined(_WIN32_WCE) && _WIN32_WCE<410
+#   define getservbyname _masked_declaration_getservbyname
+#  endif
+#  if !defined(IPPROTO_IP)
+    /* winsock[2].h was included already? */
+#   include <winsock.h>
+#  endif
+#  ifdef getservbyname
      /* this is used to be wcecompat/include/winsock_extras.h */
-#    undef getservbyname
+#   undef getservbyname
 struct servent *PASCAL getservbyname(const char *, const char *);
-#   endif
+#  endif
 
-#   ifdef _WIN64
+#  ifdef _WIN64
 /*
  * Even though sizeof(SOCKET) is 8, it's safe to cast it to int, because
  * the value constitutes an index in per-process table of limited size
@@ -35,10 +51,8 @@ struct servent *PASCAL getservbyname(const char *, const char *);
  * Windows run on happen to be two's-complement, which allows to
  * interchange INVALID_SOCKET and -1.
  */
-#    define socket(d,t,p)   ((int)socket(d,t,p))
-#    define accept(s,f,l)   ((int)accept(s,f,l))
-#   endif
-#  else
+#   define socket(d,t,p)   ((int)socket(d,t,p))
+#   define accept(s,f,l)   ((int)accept(s,f,l))
 #  endif
 
 # else
@@ -58,11 +72,7 @@ struct servent *PASCAL getservbyname(const char *, const char *);
 #  else
 #   include <sys/socket.h>
 #   ifndef NO_SYS_UN_H
-#    ifdef OPENSSL_SYS_VXWORKS
-#     include <streams/un.h>
-#    else
-#     include <sys/un.h>
-#    endif
+#    include <sys/un.h>
 #    ifndef UNIX_PATH_MAX
 #     define UNIX_PATH_MAX sizeof(((struct sockaddr_un *)NULL)->sun_path)
 #    endif
@@ -79,10 +89,6 @@ struct servent *PASCAL getservbyname(const char *, const char *);
 #   include <sys/select.h>
 #  endif
 
-#  ifdef __QNX__
-#   include <sys/select.h>
-#  endif
-
 #  ifndef VMS
 #   include <sys/ioctl.h>
 #  else
@@ -102,48 +108,55 @@ struct servent *PASCAL getservbyname(const char *, const char *);
 # endif
 
 /*
- * Some IPv6 implementations are broken, disable them in known bad versions.
+ * Some IPv6 implementations are broken, you can disable them in known
+ * bad versions.
  */
 # if !defined(OPENSSL_USE_IPV6)
-#  if defined(AF_INET6) && !defined(NETWARE_CLIB)
+#  if defined(AF_INET6)
 #   define OPENSSL_USE_IPV6 1
 #  else
 #   define OPENSSL_USE_IPV6 0
 #  endif
 # endif
 
-#endif
+# define get_last_socket_error() errno
+# define clear_socket_error()    errno=0
+
+# if defined(OPENSSL_SYS_WINDOWS)
+#  undef get_last_socket_error
+#  undef clear_socket_error
+#  define get_last_socket_error() WSAGetLastError()
+#  define clear_socket_error()    WSASetLastError(0)
+#  define readsocket(s,b,n)       recv((s),(b),(n),0)
+#  define writesocket(s,b,n)      send((s),(b),(n),0)
+# elif defined(__DJGPP__)
+#  define WATT32
+#  define WATT32_NO_OLDIES
+#  define closesocket(s)          close_s(s)
+#  define readsocket(s,b,n)       read_s(s,b,n)
+#  define writesocket(s,b,n)      send(s,b,n,0)
+# elif defined(OPENSSL_SYS_VMS)
+#  define ioctlsocket(a,b,c)      ioctl(a,b,c)
+#  define closesocket(s)          close(s)
+#  define readsocket(s,b,n)       recv((s),(b),(n),0)
+#  define writesocket(s,b,n)      send((s),(b),(n),0)
+# elif defined(OPENSSL_SYS_VXWORKS)
+#  define ioctlsocket(a,b,c)          ioctl((a),(b),(int)(c))
+#  define closesocket(s)              close(s)
+#  define readsocket(s,b,n)           read((s),(b),(n))
+#  define writesocket(s,b,n)          write((s),(char *)(b),(n))
+# else
+#  define ioctlsocket(a,b,c)      ioctl(a,b,c)
+#  define closesocket(s)          close(s)
+#  define readsocket(s,b,n)       read((s),(b),(n))
+#  define writesocket(s,b,n)      write((s),(b),(n))
+# endif
 
-#define get_last_socket_error() errno
-#define clear_socket_error()    errno=0
-
-#if defined(OPENSSL_SYS_WINDOWS)
-# undef get_last_socket_error
-# undef clear_socket_error
-# define get_last_socket_error() WSAGetLastError()
-# define clear_socket_error()    WSASetLastError(0)
-# define readsocket(s,b,n)       recv((s),(b),(n),0)
-# define writesocket(s,b,n)      send((s),(b),(n),0)
-#elif defined(__DJGPP__)
-# define WATT32
-# define WATT32_NO_OLDIES
-# define closesocket(s)          close_s(s)
-# define readsocket(s,b,n)       read_s(s,b,n)
-# define writesocket(s,b,n)      send(s,b,n,0)
-#elif defined(OPENSSL_SYS_VMS)
-# define ioctlsocket(a,b,c)      ioctl(a,b,c)
-# define closesocket(s)          close(s)
-# define readsocket(s,b,n)       recv((s),(b),(n),0)
-# define writesocket(s,b,n)      send((s),(b),(n),0)
-#elif defined(OPENSSL_SYS_VXWORKS)
-# define ioctlsocket(a,b,c)          ioctl((a),(b),(int)(c))
-# define closesocket(s)              close(s)
-# define readsocket(s,b,n)           read((s),(b),(n))
-# define writesocket(s,b,n)          write((s),(char *)(b),(n))
-#else
-# define ioctlsocket(a,b,c)      ioctl(a,b,c)
-# define closesocket(s)          close(s)
-# define readsocket(s,b,n)       read((s),(b),(n))
-# define writesocket(s,b,n)      write((s),(b),(n))
-#endif
+/* also in apps/include/apps.h */
+# if defined(OPENSSL_SYS_WIN32) || defined(OPENSSL_SYS_WINCE)
+#  define openssl_fdset(a,b) FD_SET((unsigned int)a, b)
+# else
+#  define openssl_fdset(a,b) FD_SET(a, b)
+# endif
 
+#endif