1 // 2 // detail/socket_types.hpp 3 // ~~~~~~~~~~~~~~~~~~~~~~~ 4 // 5 // Copyright (c) 2003-2017 Christopher M. Kohlhoff (chris at kohlhoff dot com) 6 // 7 // Distributed under the Boost Software License, Version 1.0. (See accompanying 8 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 9 // 10 11 #ifndef ASIO_DETAIL_SOCKET_TYPES_HPP 12 #define ASIO_DETAIL_SOCKET_TYPES_HPP 13 14 #if defined(_MSC_VER) && (_MSC_VER >= 1200) 15 # pragma once 16 #endif // defined(_MSC_VER) && (_MSC_VER >= 1200) 17 18 #include "asio/detail/config.hpp" 19 20 #if defined(ASIO_WINDOWS_RUNTIME) 21 // Empty. 22 #elif defined(ASIO_WINDOWS) || defined(__CYGWIN__) 23 # if defined(_WINSOCKAPI_) && !defined(_WINSOCK2API_) 24 # error WinSock.h has already been included 25 # endif // defined(_WINSOCKAPI_) && !defined(_WINSOCK2API_) 26 # if defined(__BORLANDC__) 27 # include <stdlib.h> // Needed for __errno 28 # if !defined(_WSPIAPI_H_) 29 # define _WSPIAPI_H_ 30 # define ASIO_WSPIAPI_H_DEFINED 31 # endif // !defined(_WSPIAPI_H_) 32 # endif // defined(__BORLANDC__) 33 # include <winsock2.h> 34 # include <ws2tcpip.h> 35 # if defined(WINAPI_FAMILY) 36 # if ((WINAPI_FAMILY & WINAPI_PARTITION_DESKTOP) != 0) 37 # include <windows.h> 38 # endif // ((WINAPI_FAMILY & WINAPI_PARTITION_DESKTOP) != 0) 39 # endif // defined(WINAPI_FAMILY) 40 # if !defined(ASIO_WINDOWS_APP) 41 # include <mswsock.h> 42 # endif // !defined(ASIO_WINDOWS_APP) 43 # if defined(ASIO_WSPIAPI_H_DEFINED) 44 # undef _WSPIAPI_H_ 45 # undef ASIO_WSPIAPI_H_DEFINED 46 # endif // defined(ASIO_WSPIAPI_H_DEFINED) 47 # if !defined(ASIO_NO_DEFAULT_LINKED_LIBS) 48 # if defined(UNDER_CE) 49 # pragma comment(lib, "ws2.lib") 50 # elif defined(_MSC_VER) || defined(__BORLANDC__) 51 # pragma comment(lib, "ws2_32.lib") 52 # if !defined(ASIO_WINDOWS_APP) 53 # pragma comment(lib, "mswsock.lib") 54 # endif // !defined(ASIO_WINDOWS_APP) 55 # endif // defined(_MSC_VER) || defined(__BORLANDC__) 56 # endif // !defined(ASIO_NO_DEFAULT_LINKED_LIBS) 57 # include "asio/detail/old_win_sdk_compat.hpp" 58 #else 59 # include <sys/ioctl.h> 60 # if (defined(__MACH__) && defined(__APPLE__)) \ 61 || defined(__FreeBSD__) || defined(__NetBSD__) \ 62 || defined(__OpenBSD__) || defined(__linux__) 63 # include <poll.h> 64 # elif !defined(__SYMBIAN32__) 65 # include <sys/poll.h> 66 # endif 67 # include <sys/types.h> 68 # include <sys/stat.h> 69 # include <fcntl.h> 70 # if defined(__hpux) 71 # include <sys/time.h> 72 # endif 73 # if !defined(__hpux) || defined(__SELECT) 74 # include <sys/select.h> 75 # endif 76 # include <sys/socket.h> 77 # include <sys/uio.h> 78 # include <sys/un.h> 79 # include <netinet/in.h> 80 # if !defined(__SYMBIAN32__) 81 # include <netinet/tcp.h> 82 # endif 83 # include <arpa/inet.h> 84 # include <netdb.h> 85 # include <net/if.h> 86 # include <limits.h> 87 # if defined(__sun) 88 # include <sys/filio.h> 89 # include <sys/sockio.h> 90 # endif 91 #endif 92 93 #include "asio/detail/push_options.hpp" 94 95 namespace asio { 96 namespace detail { 97 98 #if defined(ASIO_WINDOWS_RUNTIME) 99 const int max_addr_v4_str_len = 256; 100 const int max_addr_v6_str_len = 256; 101 typedef unsigned __int32 u_long_type; 102 typedef unsigned __int16 u_short_type; 103 struct in4_addr_type { u_long_type s_addr; }; 104 struct in4_mreq_type { in4_addr_type imr_multiaddr, imr_interface; }; 105 struct in6_addr_type { unsigned char s6_addr[16]; }; 106 struct in6_mreq_type { in6_addr_type ipv6mr_multiaddr; 107 unsigned long ipv6mr_interface; }; 108 struct socket_addr_type { int sa_family; }; 109 struct sockaddr_in4_type { int sin_family; 110 in4_addr_type sin_addr; u_short_type sin_port; }; 111 struct sockaddr_in6_type { int sin6_family; 112 in6_addr_type sin6_addr; u_short_type sin6_port; 113 u_long_type sin6_flowinfo; u_long_type sin6_scope_id; }; 114 struct sockaddr_storage_type { int ss_family; 115 unsigned char ss_bytes[128 - sizeof(int)]; }; 116 struct addrinfo_type { int ai_flags; 117 int ai_family, ai_socktype, ai_protocol; 118 int ai_addrlen; const void* ai_addr; 119 const char* ai_canonname; addrinfo_type* ai_next; }; 120 struct linger_type { u_short_type l_onoff, l_linger; }; 121 typedef u_long_type ioctl_arg_type; 122 typedef int signed_size_type; 123 # define ASIO_OS_DEF(c) ASIO_OS_DEF_##c 124 # define ASIO_OS_DEF_AF_UNSPEC 0 125 # define ASIO_OS_DEF_AF_INET 2 126 # define ASIO_OS_DEF_AF_INET6 23 127 # define ASIO_OS_DEF_SOCK_STREAM 1 128 # define ASIO_OS_DEF_SOCK_DGRAM 2 129 # define ASIO_OS_DEF_SOCK_RAW 3 130 # define ASIO_OS_DEF_SOCK_SEQPACKET 5 131 # define ASIO_OS_DEF_IPPROTO_IP 0 132 # define ASIO_OS_DEF_IPPROTO_IPV6 41 133 # define ASIO_OS_DEF_IPPROTO_TCP 6 134 # define ASIO_OS_DEF_IPPROTO_UDP 17 135 # define ASIO_OS_DEF_IPPROTO_ICMP 1 136 # define ASIO_OS_DEF_IPPROTO_ICMPV6 58 137 # define ASIO_OS_DEF_FIONBIO 1 138 # define ASIO_OS_DEF_FIONREAD 2 139 # define ASIO_OS_DEF_INADDR_ANY 0 140 # define ASIO_OS_DEF_MSG_OOB 0x1 141 # define ASIO_OS_DEF_MSG_PEEK 0x2 142 # define ASIO_OS_DEF_MSG_DONTROUTE 0x4 143 # define ASIO_OS_DEF_MSG_EOR 0 // Not supported. 144 # define ASIO_OS_DEF_SHUT_RD 0x0 145 # define ASIO_OS_DEF_SHUT_WR 0x1 146 # define ASIO_OS_DEF_SHUT_RDWR 0x2 147 # define ASIO_OS_DEF_SOMAXCONN 0x7fffffff 148 # define ASIO_OS_DEF_SOL_SOCKET 0xffff 149 # define ASIO_OS_DEF_SO_BROADCAST 0x20 150 # define ASIO_OS_DEF_SO_DEBUG 0x1 151 # define ASIO_OS_DEF_SO_DONTROUTE 0x10 152 # define ASIO_OS_DEF_SO_KEEPALIVE 0x8 153 # define ASIO_OS_DEF_SO_LINGER 0x80 154 # define ASIO_OS_DEF_SO_OOBINLINE 0x100 155 # define ASIO_OS_DEF_SO_SNDBUF 0x1001 156 # define ASIO_OS_DEF_SO_RCVBUF 0x1002 157 # define ASIO_OS_DEF_SO_SNDLOWAT 0x1003 158 # define ASIO_OS_DEF_SO_RCVLOWAT 0x1004 159 # define ASIO_OS_DEF_SO_REUSEADDR 0x4 160 # define ASIO_OS_DEF_TCP_NODELAY 0x1 161 # define ASIO_OS_DEF_IP_MULTICAST_IF 2 162 # define ASIO_OS_DEF_IP_MULTICAST_TTL 3 163 # define ASIO_OS_DEF_IP_MULTICAST_LOOP 4 164 # define ASIO_OS_DEF_IP_ADD_MEMBERSHIP 5 165 # define ASIO_OS_DEF_IP_DROP_MEMBERSHIP 6 166 # define ASIO_OS_DEF_IP_TTL 7 167 # define ASIO_OS_DEF_IPV6_UNICAST_HOPS 4 168 # define ASIO_OS_DEF_IPV6_MULTICAST_IF 9 169 # define ASIO_OS_DEF_IPV6_MULTICAST_HOPS 10 170 # define ASIO_OS_DEF_IPV6_MULTICAST_LOOP 11 171 # define ASIO_OS_DEF_IPV6_JOIN_GROUP 12 172 # define ASIO_OS_DEF_IPV6_LEAVE_GROUP 13 173 # define ASIO_OS_DEF_AI_CANONNAME 0x2 174 # define ASIO_OS_DEF_AI_PASSIVE 0x1 175 # define ASIO_OS_DEF_AI_NUMERICHOST 0x4 176 # define ASIO_OS_DEF_AI_NUMERICSERV 0x8 177 # define ASIO_OS_DEF_AI_V4MAPPED 0x800 178 # define ASIO_OS_DEF_AI_ALL 0x100 179 # define ASIO_OS_DEF_AI_ADDRCONFIG 0x400 180 #elif defined(ASIO_WINDOWS) || defined(__CYGWIN__) 181 typedef SOCKET socket_type; 182 const SOCKET invalid_socket = INVALID_SOCKET; 183 const int socket_error_retval = SOCKET_ERROR; 184 const int max_addr_v4_str_len = 256; 185 const int max_addr_v6_str_len = 256; 186 typedef sockaddr socket_addr_type; 187 typedef in_addr in4_addr_type; 188 typedef ip_mreq in4_mreq_type; 189 typedef sockaddr_in sockaddr_in4_type; 190 # if defined(ASIO_HAS_OLD_WIN_SDK) 191 typedef in6_addr_emulation in6_addr_type; 192 typedef ipv6_mreq_emulation in6_mreq_type; 193 typedef sockaddr_in6_emulation sockaddr_in6_type; 194 typedef sockaddr_storage_emulation sockaddr_storage_type; 195 typedef addrinfo_emulation addrinfo_type; 196 # else 197 typedef in6_addr in6_addr_type; 198 typedef ipv6_mreq in6_mreq_type; 199 typedef sockaddr_in6 sockaddr_in6_type; 200 typedef sockaddr_storage sockaddr_storage_type; 201 typedef addrinfo addrinfo_type; 202 # endif 203 typedef ::linger linger_type; 204 typedef unsigned long ioctl_arg_type; 205 typedef u_long u_long_type; 206 typedef u_short u_short_type; 207 typedef int signed_size_type; 208 # define ASIO_OS_DEF(c) ASIO_OS_DEF_##c 209 # define ASIO_OS_DEF_AF_UNSPEC AF_UNSPEC 210 # define ASIO_OS_DEF_AF_INET AF_INET 211 # define ASIO_OS_DEF_AF_INET6 AF_INET6 212 # define ASIO_OS_DEF_SOCK_STREAM SOCK_STREAM 213 # define ASIO_OS_DEF_SOCK_DGRAM SOCK_DGRAM 214 # define ASIO_OS_DEF_SOCK_RAW SOCK_RAW 215 # define ASIO_OS_DEF_SOCK_SEQPACKET SOCK_SEQPACKET 216 # define ASIO_OS_DEF_IPPROTO_IP IPPROTO_IP 217 # define ASIO_OS_DEF_IPPROTO_IPV6 IPPROTO_IPV6 218 # define ASIO_OS_DEF_IPPROTO_TCP IPPROTO_TCP 219 # define ASIO_OS_DEF_IPPROTO_UDP IPPROTO_UDP 220 # define ASIO_OS_DEF_IPPROTO_ICMP IPPROTO_ICMP 221 # define ASIO_OS_DEF_IPPROTO_ICMPV6 IPPROTO_ICMPV6 222 # define ASIO_OS_DEF_FIONBIO FIONBIO 223 # define ASIO_OS_DEF_FIONREAD FIONREAD 224 # define ASIO_OS_DEF_INADDR_ANY INADDR_ANY 225 # define ASIO_OS_DEF_MSG_OOB MSG_OOB 226 # define ASIO_OS_DEF_MSG_PEEK MSG_PEEK 227 # define ASIO_OS_DEF_MSG_DONTROUTE MSG_DONTROUTE 228 # define ASIO_OS_DEF_MSG_EOR 0 // Not supported on Windows. 229 # define ASIO_OS_DEF_SHUT_RD SD_RECEIVE 230 # define ASIO_OS_DEF_SHUT_WR SD_SEND 231 # define ASIO_OS_DEF_SHUT_RDWR SD_BOTH 232 # define ASIO_OS_DEF_SOMAXCONN SOMAXCONN 233 # define ASIO_OS_DEF_SOL_SOCKET SOL_SOCKET 234 # define ASIO_OS_DEF_SO_BROADCAST SO_BROADCAST 235 # define ASIO_OS_DEF_SO_DEBUG SO_DEBUG 236 # define ASIO_OS_DEF_SO_DONTROUTE SO_DONTROUTE 237 # define ASIO_OS_DEF_SO_KEEPALIVE SO_KEEPALIVE 238 # define ASIO_OS_DEF_SO_LINGER SO_LINGER 239 # define ASIO_OS_DEF_SO_OOBINLINE SO_OOBINLINE 240 # define ASIO_OS_DEF_SO_SNDBUF SO_SNDBUF 241 # define ASIO_OS_DEF_SO_RCVBUF SO_RCVBUF 242 # define ASIO_OS_DEF_SO_SNDLOWAT SO_SNDLOWAT 243 # define ASIO_OS_DEF_SO_RCVLOWAT SO_RCVLOWAT 244 # define ASIO_OS_DEF_SO_REUSEADDR SO_REUSEADDR 245 # define ASIO_OS_DEF_TCP_NODELAY TCP_NODELAY 246 # define ASIO_OS_DEF_IP_MULTICAST_IF IP_MULTICAST_IF 247 # define ASIO_OS_DEF_IP_MULTICAST_TTL IP_MULTICAST_TTL 248 # define ASIO_OS_DEF_IP_MULTICAST_LOOP IP_MULTICAST_LOOP 249 # define ASIO_OS_DEF_IP_ADD_MEMBERSHIP IP_ADD_MEMBERSHIP 250 # define ASIO_OS_DEF_IP_DROP_MEMBERSHIP IP_DROP_MEMBERSHIP 251 # define ASIO_OS_DEF_IP_TTL IP_TTL 252 # define ASIO_OS_DEF_IPV6_UNICAST_HOPS IPV6_UNICAST_HOPS 253 # define ASIO_OS_DEF_IPV6_MULTICAST_IF IPV6_MULTICAST_IF 254 # define ASIO_OS_DEF_IPV6_MULTICAST_HOPS IPV6_MULTICAST_HOPS 255 # define ASIO_OS_DEF_IPV6_MULTICAST_LOOP IPV6_MULTICAST_LOOP 256 # define ASIO_OS_DEF_IPV6_JOIN_GROUP IPV6_JOIN_GROUP 257 # define ASIO_OS_DEF_IPV6_LEAVE_GROUP IPV6_LEAVE_GROUP 258 # define ASIO_OS_DEF_AI_CANONNAME AI_CANONNAME 259 # define ASIO_OS_DEF_AI_PASSIVE AI_PASSIVE 260 # define ASIO_OS_DEF_AI_NUMERICHOST AI_NUMERICHOST 261 # if defined(AI_NUMERICSERV) 262 # define ASIO_OS_DEF_AI_NUMERICSERV AI_NUMERICSERV 263 # else 264 # define ASIO_OS_DEF_AI_NUMERICSERV 0 265 # endif 266 # if defined(AI_V4MAPPED) 267 # define ASIO_OS_DEF_AI_V4MAPPED AI_V4MAPPED 268 # else 269 # define ASIO_OS_DEF_AI_V4MAPPED 0 270 # endif 271 # if defined(AI_ALL) 272 # define ASIO_OS_DEF_AI_ALL AI_ALL 273 # else 274 # define ASIO_OS_DEF_AI_ALL 0 275 # endif 276 # if defined(AI_ADDRCONFIG) 277 # define ASIO_OS_DEF_AI_ADDRCONFIG AI_ADDRCONFIG 278 # else 279 # define ASIO_OS_DEF_AI_ADDRCONFIG 0 280 # endif 281 # if defined (_WIN32_WINNT) 282 const int max_iov_len = 64; 283 # else 284 const int max_iov_len = 16; 285 # endif 286 #else 287 typedef int socket_type; 288 const int invalid_socket = -1; 289 const int socket_error_retval = -1; 290 const int max_addr_v4_str_len = INET_ADDRSTRLEN; 291 #if defined(INET6_ADDRSTRLEN) 292 const int max_addr_v6_str_len = INET6_ADDRSTRLEN + 1 + IF_NAMESIZE; 293 #else // defined(INET6_ADDRSTRLEN) 294 const int max_addr_v6_str_len = 256; 295 #endif // defined(INET6_ADDRSTRLEN) 296 typedef sockaddr socket_addr_type; 297 typedef in_addr in4_addr_type; 298 # if defined(__hpux) 299 // HP-UX doesn't provide ip_mreq when _XOPEN_SOURCE_EXTENDED is defined. 300 struct in4_mreq_type 301 { 302 struct in_addr imr_multiaddr; 303 struct in_addr imr_interface; 304 }; 305 # else 306 typedef ip_mreq in4_mreq_type; 307 # endif 308 typedef sockaddr_in sockaddr_in4_type; 309 typedef in6_addr in6_addr_type; 310 typedef ipv6_mreq in6_mreq_type; 311 typedef sockaddr_in6 sockaddr_in6_type; 312 typedef sockaddr_storage sockaddr_storage_type; 313 typedef sockaddr_un sockaddr_un_type; 314 typedef addrinfo addrinfo_type; 315 typedef ::linger linger_type; 316 typedef int ioctl_arg_type; 317 typedef uint32_t u_long_type; 318 typedef uint16_t u_short_type; 319 #if defined(ASIO_HAS_SSIZE_T) 320 typedef ssize_t signed_size_type; 321 #else // defined(ASIO_HAS_SSIZE_T) 322 typedef int signed_size_type; 323 #endif // defined(ASIO_HAS_SSIZE_T) 324 # define ASIO_OS_DEF(c) ASIO_OS_DEF_##c 325 # define ASIO_OS_DEF_AF_UNSPEC AF_UNSPEC 326 # define ASIO_OS_DEF_AF_INET AF_INET 327 # define ASIO_OS_DEF_AF_INET6 AF_INET6 328 # define ASIO_OS_DEF_SOCK_STREAM SOCK_STREAM 329 # define ASIO_OS_DEF_SOCK_DGRAM SOCK_DGRAM 330 # define ASIO_OS_DEF_SOCK_RAW SOCK_RAW 331 # define ASIO_OS_DEF_SOCK_SEQPACKET SOCK_SEQPACKET 332 # define ASIO_OS_DEF_IPPROTO_IP IPPROTO_IP 333 # define ASIO_OS_DEF_IPPROTO_IPV6 IPPROTO_IPV6 334 # define ASIO_OS_DEF_IPPROTO_TCP IPPROTO_TCP 335 # define ASIO_OS_DEF_IPPROTO_UDP IPPROTO_UDP 336 # define ASIO_OS_DEF_IPPROTO_ICMP IPPROTO_ICMP 337 # define ASIO_OS_DEF_IPPROTO_ICMPV6 IPPROTO_ICMPV6 338 # define ASIO_OS_DEF_FIONBIO FIONBIO 339 # define ASIO_OS_DEF_FIONREAD FIONREAD 340 # define ASIO_OS_DEF_INADDR_ANY INADDR_ANY 341 # define ASIO_OS_DEF_MSG_OOB MSG_OOB 342 # define ASIO_OS_DEF_MSG_PEEK MSG_PEEK 343 # define ASIO_OS_DEF_MSG_DONTROUTE MSG_DONTROUTE 344 # define ASIO_OS_DEF_MSG_EOR MSG_EOR 345 # define ASIO_OS_DEF_SHUT_RD SHUT_RD 346 # define ASIO_OS_DEF_SHUT_WR SHUT_WR 347 # define ASIO_OS_DEF_SHUT_RDWR SHUT_RDWR 348 # define ASIO_OS_DEF_SOMAXCONN SOMAXCONN 349 # define ASIO_OS_DEF_SOL_SOCKET SOL_SOCKET 350 # define ASIO_OS_DEF_SO_BROADCAST SO_BROADCAST 351 # define ASIO_OS_DEF_SO_DEBUG SO_DEBUG 352 # define ASIO_OS_DEF_SO_DONTROUTE SO_DONTROUTE 353 # define ASIO_OS_DEF_SO_KEEPALIVE SO_KEEPALIVE 354 # define ASIO_OS_DEF_SO_LINGER SO_LINGER 355 # define ASIO_OS_DEF_SO_OOBINLINE SO_OOBINLINE 356 # define ASIO_OS_DEF_SO_SNDBUF SO_SNDBUF 357 # define ASIO_OS_DEF_SO_RCVBUF SO_RCVBUF 358 # define ASIO_OS_DEF_SO_SNDLOWAT SO_SNDLOWAT 359 # define ASIO_OS_DEF_SO_RCVLOWAT SO_RCVLOWAT 360 # define ASIO_OS_DEF_SO_REUSEADDR SO_REUSEADDR 361 # define ASIO_OS_DEF_TCP_NODELAY TCP_NODELAY 362 # define ASIO_OS_DEF_IP_MULTICAST_IF IP_MULTICAST_IF 363 # define ASIO_OS_DEF_IP_MULTICAST_TTL IP_MULTICAST_TTL 364 # define ASIO_OS_DEF_IP_MULTICAST_LOOP IP_MULTICAST_LOOP 365 # define ASIO_OS_DEF_IP_ADD_MEMBERSHIP IP_ADD_MEMBERSHIP 366 # define ASIO_OS_DEF_IP_DROP_MEMBERSHIP IP_DROP_MEMBERSHIP 367 # define ASIO_OS_DEF_IP_TTL IP_TTL 368 # define ASIO_OS_DEF_IPV6_UNICAST_HOPS IPV6_UNICAST_HOPS 369 # define ASIO_OS_DEF_IPV6_MULTICAST_IF IPV6_MULTICAST_IF 370 # define ASIO_OS_DEF_IPV6_MULTICAST_HOPS IPV6_MULTICAST_HOPS 371 # define ASIO_OS_DEF_IPV6_MULTICAST_LOOP IPV6_MULTICAST_LOOP 372 # define ASIO_OS_DEF_IPV6_JOIN_GROUP IPV6_JOIN_GROUP 373 # define ASIO_OS_DEF_IPV6_LEAVE_GROUP IPV6_LEAVE_GROUP 374 # define ASIO_OS_DEF_AI_CANONNAME AI_CANONNAME 375 # define ASIO_OS_DEF_AI_PASSIVE AI_PASSIVE 376 # define ASIO_OS_DEF_AI_NUMERICHOST AI_NUMERICHOST 377 # if defined(AI_NUMERICSERV) 378 # define ASIO_OS_DEF_AI_NUMERICSERV AI_NUMERICSERV 379 # else 380 # define ASIO_OS_DEF_AI_NUMERICSERV 0 381 # endif 382 // Note: QNX Neutrino 6.3 defines AI_V4MAPPED, AI_ALL and AI_ADDRCONFIG but 383 // does not implement them. Therefore they are specifically excluded here. 384 # if defined(AI_V4MAPPED) && !defined(__QNXNTO__) 385 # define ASIO_OS_DEF_AI_V4MAPPED AI_V4MAPPED 386 # else 387 # define ASIO_OS_DEF_AI_V4MAPPED 0 388 # endif 389 # if defined(AI_ALL) && !defined(__QNXNTO__) 390 # define ASIO_OS_DEF_AI_ALL AI_ALL 391 # else 392 # define ASIO_OS_DEF_AI_ALL 0 393 # endif 394 # if defined(AI_ADDRCONFIG) && !defined(__QNXNTO__) 395 # define ASIO_OS_DEF_AI_ADDRCONFIG AI_ADDRCONFIG 396 # else 397 # define ASIO_OS_DEF_AI_ADDRCONFIG 0 398 # endif 399 # if defined(IOV_MAX) 400 const int max_iov_len = IOV_MAX; 401 # else 402 // POSIX platforms are not required to define IOV_MAX. 403 const int max_iov_len = 16; 404 # endif 405 #endif 406 const int custom_socket_option_level = 0xA5100000; 407 const int enable_connection_aborted_option = 1; 408 const int always_fail_option = 2; 409 410 } // namespace detail 411 } // namespace asio 412 413 #include "asio/detail/pop_options.hpp" 414 415 #endif // ASIO_DETAIL_SOCKET_TYPES_HPP 416