passenger 6.0.14 → 6.0.27

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1978) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG +380 -85
  3. data/CONTRIBUTING.md +2 -2
  4. data/CONTRIBUTORS +8 -0
  5. data/LICENSE +1 -1
  6. data/README.md +3 -3
  7. data/Rakefile +15 -4
  8. data/bin/passenger +2 -2
  9. data/bin/passenger-config +2 -2
  10. data/bin/passenger-install-apache2-module +7 -2
  11. data/bin/passenger-install-nginx-module +24 -8
  12. data/bin/passenger-memory-stats +2 -2
  13. data/bin/passenger-status +2 -2
  14. data/build/agent.rb +2 -4
  15. data/build/apache2.rb +3 -3
  16. data/build/basics.rb +14 -6
  17. data/build/common_library.rb +3 -8
  18. data/build/cxx_tests.rb +20 -9
  19. data/build/integration_tests.rb +10 -9
  20. data/build/misc.rb +2 -4
  21. data/build/nginx.rb +2 -2
  22. data/build/node_tests.rb +2 -2
  23. data/build/oxt_tests.rb +2 -2
  24. data/build/packaging.rb +2 -2
  25. data/build/ruby_extension.rb +2 -2
  26. data/build/ruby_tests.rb +3 -3
  27. data/build/schema_printer.rb +2 -4
  28. data/build/support/cplusplus.rb +2 -2
  29. data/build/support/cxx_dependency_map.rb +249 -311
  30. data/build/support/general.rb +2 -2
  31. data/build/support/vendor/cxx_hinted_parser/LICENSE.md +1 -1
  32. data/build/support/vendor/cxx_hinted_parser/lib/cxx_hinted_parser/parser.rb +2 -2
  33. data/build/support/vendor/cxx_hinted_parser/lib/cxx_hinted_parser.rb +2 -2
  34. data/build/support/vendor/cxxcodebuilder/LICENSE.md +1 -1
  35. data/build/support/vendor/cxxcodebuilder/lib/cxxcodebuilder/builder.rb +2 -2
  36. data/build/support/vendor/cxxcodebuilder/lib/cxxcodebuilder/initializer_builder.rb +2 -2
  37. data/build/support/vendor/cxxcodebuilder/lib/cxxcodebuilder.rb +2 -2
  38. data/build/test_basics.rb +27 -13
  39. data/dev/copy_boost_headers +96 -77
  40. data/dev/index_cxx_dependencies.rb +1 -1
  41. data/dev/nginx_version_sha256 +72 -0
  42. data/doc/AiInstructions.md +112 -0
  43. data/doc/CxxMockingStrategy.md +42 -0
  44. data/doc/CxxTestingGuide.md +110 -0
  45. data/doc/DesignAspects/LimitedGemDependencies.md +47 -0
  46. data/doc/DesignAspects/NoGemActivationDuringRubyLoaderInitialization.md +27 -0
  47. data/doc/TempFileHandling.md +15 -0
  48. data/package.json +15 -15
  49. data/passenger.gemspec +8 -2
  50. data/resources/templates/apache2/deployment_example.txt.erb +1 -1
  51. data/resources/templates/nginx/deployment_example.txt.erb +1 -1
  52. data/resources/templates/standalone/http.erb +1 -0
  53. data/resources/templates/standalone/server.erb +2 -0
  54. data/src/agent/AgentMain.cpp +4 -10
  55. data/src/agent/Core/ApiServer.h +3 -4
  56. data/src/agent/Core/ApplicationPool/AbstractSession.h +12 -3
  57. data/src/agent/Core/ApplicationPool/BasicGroupInfo.h +2 -2
  58. data/src/agent/Core/ApplicationPool/BasicProcessInfo.h +2 -2
  59. data/src/agent/Core/ApplicationPool/Common.h +2 -2
  60. data/src/agent/Core/ApplicationPool/Context.h +7 -4
  61. data/src/agent/Core/ApplicationPool/Group/InitializationAndShutdown.cpp +10 -2
  62. data/src/agent/Core/ApplicationPool/Group/InternalUtils.cpp +12 -4
  63. data/src/agent/Core/ApplicationPool/Group/LifetimeAndBasics.cpp +10 -2
  64. data/src/agent/Core/ApplicationPool/Group/Miscellaneous.cpp +11 -2
  65. data/src/agent/Core/ApplicationPool/Group/OutOfBandWork.cpp +11 -2
  66. data/src/agent/Core/ApplicationPool/Group/ProcessListManagement.cpp +85 -5
  67. data/src/agent/Core/ApplicationPool/Group/SessionManagement.cpp +66 -21
  68. data/src/agent/Core/ApplicationPool/Group/SpawningAndRestarting.cpp +10 -2
  69. data/src/agent/Core/ApplicationPool/Group/StateInspection.cpp +11 -3
  70. data/src/agent/Core/ApplicationPool/Group/Verification.cpp +10 -2
  71. data/src/agent/Core/ApplicationPool/Group.h +18 -8
  72. data/src/agent/Core/ApplicationPool/Implementation.cpp +2 -5
  73. data/src/agent/Core/ApplicationPool/Options.h +3 -4
  74. data/src/agent/Core/ApplicationPool/Pool/AnalyticsCollection.cpp +7 -2
  75. data/src/agent/Core/ApplicationPool/Pool/GarbageCollection.cpp +7 -2
  76. data/src/agent/Core/ApplicationPool/Pool/GeneralUtils.cpp +7 -2
  77. data/src/agent/Core/ApplicationPool/Pool/GroupUtils.cpp +7 -2
  78. data/src/agent/Core/ApplicationPool/Pool/InitializationAndShutdown.cpp +7 -2
  79. data/src/agent/Core/ApplicationPool/Pool/Miscellaneous.cpp +7 -2
  80. data/src/agent/Core/ApplicationPool/Pool/ProcessUtils.cpp +7 -2
  81. data/src/agent/Core/ApplicationPool/Pool/StateInspection.cpp +17 -3
  82. data/src/agent/Core/ApplicationPool/Pool.h +2 -4
  83. data/src/agent/Core/ApplicationPool/Process.cpp +2 -2
  84. data/src/agent/Core/ApplicationPool/Process.h +24 -8
  85. data/src/agent/Core/ApplicationPool/Session.h +22 -22
  86. data/src/agent/Core/ApplicationPool/Socket.h +17 -7
  87. data/src/agent/Core/ApplicationPool/TestSession.h +76 -17
  88. data/src/agent/Core/Config.h +17 -40
  89. data/src/agent/Core/ConfigChange.cpp +3 -43
  90. data/src/agent/Core/ConfigChange.h +2 -2
  91. data/src/agent/Core/Controller/AppResponse.h +2 -3
  92. data/src/agent/Core/Controller/BufferBody.cpp +2 -2
  93. data/src/agent/Core/Controller/CheckoutSession.cpp +125 -16
  94. data/src/agent/Core/Controller/Client.h +2 -3
  95. data/src/agent/Core/Controller/Config.cpp +2 -2
  96. data/src/agent/Core/Controller/Config.h +14 -5
  97. data/src/agent/Core/Controller/ForwardResponse.cpp +2 -2
  98. data/src/agent/Core/Controller/Hooks.cpp +15 -2
  99. data/src/agent/Core/Controller/Implementation.cpp +2 -2
  100. data/src/agent/Core/Controller/InitRequest.cpp +4 -3
  101. data/src/agent/Core/Controller/InitializationAndShutdown.cpp +2 -2
  102. data/src/agent/Core/Controller/InternalUtils.cpp +14 -2
  103. data/src/agent/Core/Controller/Miscellaneous.cpp +2 -2
  104. data/src/agent/Core/Controller/Request.h +5 -4
  105. data/src/agent/Core/Controller/SendRequest.cpp +4 -4
  106. data/src/agent/Core/Controller/StateInspection.cpp +2 -2
  107. data/src/agent/Core/Controller/TurboCaching.h +2 -2
  108. data/src/agent/Core/Controller.h +15 -15
  109. data/src/agent/Core/CoreMain.cpp +14 -75
  110. data/src/agent/Core/OptionParser.h +11 -9
  111. data/src/agent/Core/ResponseCache.h +5 -4
  112. data/src/agent/Core/SecurityUpdateChecker.h +7 -8
  113. data/src/agent/Core/SpawningKit/Config/AutoGeneratedCode.h +2 -2
  114. data/src/agent/Core/SpawningKit/Config/AutoGeneratedCode.h.cxxcodebuilder +2 -2
  115. data/src/agent/Core/SpawningKit/Config.h +2 -2
  116. data/src/agent/Core/SpawningKit/Context.h +2 -2
  117. data/src/agent/Core/SpawningKit/DirectSpawner.h +2 -2
  118. data/src/agent/Core/SpawningKit/DummySpawner.h +2 -2
  119. data/src/agent/Core/SpawningKit/ErrorRenderer.h +7 -2
  120. data/src/agent/Core/SpawningKit/Exceptions.h +2 -2
  121. data/src/agent/Core/SpawningKit/Factory.h +2 -2
  122. data/src/agent/Core/SpawningKit/Handshake/BackgroundIOCapturer.h +2 -2
  123. data/src/agent/Core/SpawningKit/Handshake/Perform.h +6 -6
  124. data/src/agent/Core/SpawningKit/Handshake/Prepare.h +3 -55
  125. data/src/agent/Core/SpawningKit/Handshake/Session.h +5 -2
  126. data/src/agent/Core/SpawningKit/Handshake/WorkDir.h +7 -4
  127. data/src/agent/Core/SpawningKit/Journey.h +2 -2
  128. data/src/agent/Core/SpawningKit/PipeWatcher.h +20 -5
  129. data/src/agent/Core/SpawningKit/Result/AutoGeneratedCode.h +2 -2
  130. data/src/agent/Core/SpawningKit/Result/AutoGeneratedCode.h.cxxcodebuilder +2 -2
  131. data/src/agent/Core/SpawningKit/Result.h +2 -2
  132. data/src/agent/Core/SpawningKit/SmartSpawner.h +8 -4
  133. data/src/agent/Core/SpawningKit/Spawner.h +6 -2
  134. data/src/agent/Core/SpawningKit/UserSwitchingRules.h +4 -4
  135. data/src/agent/Core/TelemetryCollector.h +2 -2
  136. data/src/agent/ExecHelper/ExecHelperMain.cpp +12 -14
  137. data/src/agent/FileReadHelper/FileReadHelperMain.cpp +9 -12
  138. data/src/{cxx_supportlib/FileTools/LargeFiles.h → agent/MainFunctions.h} +12 -17
  139. data/src/agent/Shared/ApiAccountUtils.h +2 -2
  140. data/src/agent/Shared/ApiServerUtils.h +5 -4
  141. data/src/agent/Shared/ApplicationPoolApiKey.h +2 -2
  142. data/src/agent/Shared/Fundamentals/AbortHandler.cpp +90 -11
  143. data/src/agent/Shared/Fundamentals/AbortHandler.h +4 -2
  144. data/src/agent/Shared/Fundamentals/Initialization.cpp +12 -6
  145. data/src/agent/Shared/Fundamentals/Initialization.h +5 -5
  146. data/src/agent/Shared/Fundamentals/Utils.cpp +2 -2
  147. data/src/agent/Shared/Fundamentals/Utils.h +2 -2
  148. data/src/agent/SpawnEnvSetupper/SpawnEnvSetupperMain.cpp +33 -13
  149. data/src/agent/SystemMetrics/SystemMetricsMain.cpp +3 -2
  150. data/src/agent/TempDirToucher/TempDirToucherMain.cpp +8 -6
  151. data/src/agent/Watchdog/AgentWatcher.cpp +2 -2
  152. data/src/agent/Watchdog/ApiServer.h +3 -3
  153. data/src/agent/Watchdog/Config.h +6 -23
  154. data/src/agent/Watchdog/CoreWatcher.cpp +2 -2
  155. data/src/agent/Watchdog/InstanceDirToucher.cpp +2 -2
  156. data/src/agent/Watchdog/WatchdogMain.cpp +15 -23
  157. data/src/apache2_module/Bucket.cpp +2 -2
  158. data/src/apache2_module/Bucket.h +2 -2
  159. data/src/apache2_module/CBindings.cpp +2 -2
  160. data/src/apache2_module/Config.cpp +2 -2
  161. data/src/apache2_module/Config.h +2 -2
  162. data/src/apache2_module/ConfigGeneral/AutoGeneratedDefinitions.cpp +12 -22
  163. data/src/apache2_module/ConfigGeneral/AutoGeneratedDefinitions.cpp.cxxcodebuilder +2 -2
  164. data/src/apache2_module/ConfigGeneral/AutoGeneratedManifestDefaultsInitialization.cpp +7 -2
  165. data/src/apache2_module/ConfigGeneral/AutoGeneratedManifestDefaultsInitialization.cpp.cxxcodebuilder +2 -2
  166. data/src/apache2_module/ConfigGeneral/AutoGeneratedSetterFuncs.cpp +32 -62
  167. data/src/apache2_module/ConfigGeneral/AutoGeneratedSetterFuncs.cpp.cxxcodebuilder +2 -2
  168. data/src/apache2_module/ConfigGeneral/Common.h +2 -2
  169. data/src/apache2_module/ConfigGeneral/ManifestGeneration.h +7 -5
  170. data/src/apache2_module/ConfigGeneral/SetterFuncs.h +2 -2
  171. data/src/apache2_module/DirConfig/AutoGeneratedCreateFunction.cpp +7 -2
  172. data/src/apache2_module/DirConfig/AutoGeneratedCreateFunction.cpp.cxxcodebuilder +2 -2
  173. data/src/apache2_module/DirConfig/AutoGeneratedHeaderSerialization.cpp +5 -2
  174. data/src/apache2_module/DirConfig/AutoGeneratedHeaderSerialization.cpp.cxxcodebuilder +2 -2
  175. data/src/apache2_module/DirConfig/AutoGeneratedManifestGeneration.cpp +15 -2
  176. data/src/apache2_module/DirConfig/AutoGeneratedManifestGeneration.cpp.cxxcodebuilder +2 -2
  177. data/src/apache2_module/DirConfig/AutoGeneratedMergeFunction.cpp +9 -2
  178. data/src/apache2_module/DirConfig/AutoGeneratedMergeFunction.cpp.cxxcodebuilder +2 -2
  179. data/src/apache2_module/DirConfig/AutoGeneratedStruct.h +18 -2
  180. data/src/apache2_module/DirConfig/AutoGeneratedStruct.h.cxxcodebuilder +5 -2
  181. data/src/apache2_module/DirectoryMapper.h +2 -2
  182. data/src/apache2_module/Hooks.cpp +29 -7
  183. data/src/apache2_module/Hooks.h +2 -2
  184. data/src/apache2_module/ServerConfig/AutoGeneratedManifestGeneration.cpp +11 -46
  185. data/src/apache2_module/ServerConfig/AutoGeneratedManifestGeneration.cpp.cxxcodebuilder +2 -2
  186. data/src/apache2_module/ServerConfig/AutoGeneratedStruct.h +15 -55
  187. data/src/apache2_module/ServerConfig/AutoGeneratedStruct.h.cxxcodebuilder +4 -3
  188. data/src/apache2_module/Utils.h +2 -2
  189. data/src/apache2_module/mod_passenger.c +2 -2
  190. data/src/cxx_supportlib/Algorithms/Hasher.cpp +3 -3
  191. data/src/cxx_supportlib/Algorithms/Hasher.h +6 -9
  192. data/src/cxx_supportlib/Algorithms/MovingAverage.h +3 -168
  193. data/src/cxx_supportlib/AppLocalConfigFileUtils.h +2 -2
  194. data/src/cxx_supportlib/AppTypeDetector/CBindings.cpp +2 -2
  195. data/src/cxx_supportlib/AppTypeDetector/CBindings.h +2 -2
  196. data/src/cxx_supportlib/AppTypeDetector/Detector.h +2 -2
  197. data/src/cxx_supportlib/BackgroundEventLoop.cpp +6 -2
  198. data/src/cxx_supportlib/BackgroundEventLoop.h +2 -2
  199. data/src/cxx_supportlib/ConfigKit/AsyncUtils.h +2 -2
  200. data/src/cxx_supportlib/ConfigKit/Common.h +3 -3
  201. data/src/cxx_supportlib/ConfigKit/ConfigKit.h +2 -2
  202. data/src/cxx_supportlib/ConfigKit/DummyTranslator.h +2 -2
  203. data/src/cxx_supportlib/ConfigKit/PrefixTranslator.h +2 -2
  204. data/src/cxx_supportlib/ConfigKit/Schema.h +2 -2
  205. data/src/cxx_supportlib/ConfigKit/SchemaUtils.h +2 -2
  206. data/src/cxx_supportlib/ConfigKit/Store.h +2 -2
  207. data/src/cxx_supportlib/ConfigKit/SubComponentUtils.h +2 -2
  208. data/src/cxx_supportlib/ConfigKit/TableTranslator.h +2 -2
  209. data/src/cxx_supportlib/ConfigKit/Translator.h +2 -2
  210. data/src/cxx_supportlib/ConfigKit/Utils.h +2 -2
  211. data/src/cxx_supportlib/Constants.h +4 -3
  212. data/src/cxx_supportlib/Constants.h.cxxcodebuilder +2 -2
  213. data/src/cxx_supportlib/DataStructures/HashedStaticString.h +2 -2
  214. data/src/cxx_supportlib/DataStructures/LString.cpp +2 -2
  215. data/src/cxx_supportlib/DataStructures/LString.h +6 -2
  216. data/src/cxx_supportlib/DataStructures/StringKeyTable.h +3 -3
  217. data/src/cxx_supportlib/DataStructures/StringMap.h +4 -6
  218. data/src/cxx_supportlib/Exceptions.cpp +2 -2
  219. data/src/cxx_supportlib/Exceptions.h +2 -2
  220. data/src/cxx_supportlib/FileDescriptor.h +2 -2
  221. data/src/cxx_supportlib/FileTools/FileManip.cpp +2 -2
  222. data/src/cxx_supportlib/FileTools/FileManip.h +4 -2
  223. data/src/cxx_supportlib/FileTools/PathManip.cpp +13 -4
  224. data/src/cxx_supportlib/FileTools/PathManip.h +2 -2
  225. data/src/cxx_supportlib/FileTools/PathManipCBindings.cpp +2 -2
  226. data/src/cxx_supportlib/FileTools/PathManipCBindings.h +2 -2
  227. data/src/cxx_supportlib/FileTools/PathSecurityCheck.cpp +2 -2
  228. data/src/cxx_supportlib/FileTools/PathSecurityCheck.h +2 -2
  229. data/src/cxx_supportlib/Hooks.h +2 -3
  230. data/src/cxx_supportlib/IOTools/BufferedIO.h +2 -2
  231. data/src/cxx_supportlib/IOTools/IOUtils.cpp +53 -68
  232. data/src/cxx_supportlib/IOTools/IOUtils.h +67 -75
  233. data/src/cxx_supportlib/IOTools/MessageIO.h +2 -2
  234. data/src/cxx_supportlib/IOTools/MessageSerialization.h +2 -2
  235. data/src/cxx_supportlib/InstanceDirectory.h +2 -2
  236. data/src/cxx_supportlib/Integrations/LibevJsonUtils.h +5 -5
  237. data/src/cxx_supportlib/JsonTools/Autocast.h +2 -2
  238. data/src/cxx_supportlib/JsonTools/CBindings.cpp +2 -4
  239. data/src/cxx_supportlib/JsonTools/CBindings.h +2 -2
  240. data/src/cxx_supportlib/JsonTools/JsonUtils.h +6 -6
  241. data/src/cxx_supportlib/LoggingKit/Assert.h +2 -2
  242. data/src/cxx_supportlib/LoggingKit/Config.h +2 -2
  243. data/src/cxx_supportlib/LoggingKit/Context.h +18 -23
  244. data/src/cxx_supportlib/LoggingKit/Forward.h +2 -4
  245. data/src/cxx_supportlib/LoggingKit/Implementation.cpp +38 -74
  246. data/src/cxx_supportlib/LoggingKit/Logging.h +2 -2
  247. data/src/cxx_supportlib/LoggingKit/LoggingKit.h +2 -2
  248. data/src/cxx_supportlib/LveLoggingDecorator.h +2 -2
  249. data/src/cxx_supportlib/MemoryKit/mbuf.cpp +14 -6
  250. data/src/cxx_supportlib/MemoryKit/mbuf.h +3 -3
  251. data/src/cxx_supportlib/MemoryKit/palloc.cpp +1 -1
  252. data/src/cxx_supportlib/MemoryKit/palloc.h +1 -1
  253. data/src/cxx_supportlib/ProcessManagement/Ruby.cpp +2 -2
  254. data/src/cxx_supportlib/ProcessManagement/Ruby.h +2 -2
  255. data/src/cxx_supportlib/ProcessManagement/Spawn.cpp +2 -2
  256. data/src/cxx_supportlib/ProcessManagement/Spawn.h +2 -2
  257. data/src/cxx_supportlib/ProcessManagement/Utils.cpp +3 -3
  258. data/src/cxx_supportlib/ProcessManagement/Utils.h +2 -2
  259. data/src/cxx_supportlib/RandomGenerator.h +2 -2
  260. data/src/cxx_supportlib/ResourceLocator.h +3 -3
  261. data/src/cxx_supportlib/SafeLibev.h +5 -5
  262. data/src/cxx_supportlib/SecurityKit/Crypto.cpp +5 -96
  263. data/src/cxx_supportlib/SecurityKit/Crypto.h +2 -10
  264. data/src/cxx_supportlib/SecurityKit/MemZeroGuard.h +2 -2
  265. data/src/cxx_supportlib/ServerKit/AcceptLoadBalancer.h +4 -2
  266. data/src/cxx_supportlib/ServerKit/Channel.h +2 -2
  267. data/src/cxx_supportlib/ServerKit/Client.h +2 -2
  268. data/src/cxx_supportlib/ServerKit/ClientRef.h +2 -2
  269. data/src/cxx_supportlib/ServerKit/Config.h +2 -2
  270. data/src/cxx_supportlib/ServerKit/Context.h +8 -2
  271. data/src/cxx_supportlib/ServerKit/CookieUtils.h +2 -2
  272. data/src/cxx_supportlib/ServerKit/Errors.h +5 -4
  273. data/src/cxx_supportlib/ServerKit/FdSinkChannel.h +2 -2
  274. data/src/cxx_supportlib/ServerKit/FdSourceChannel.h +2 -2
  275. data/src/cxx_supportlib/ServerKit/FileBufferedChannel.h +2 -2
  276. data/src/cxx_supportlib/ServerKit/FileBufferedFdSinkChannel.h +2 -2
  277. data/src/cxx_supportlib/ServerKit/HeaderTable.h +2 -2
  278. data/src/cxx_supportlib/ServerKit/Hooks.h +4 -4
  279. data/src/cxx_supportlib/ServerKit/HttpChunkedBodyParser.h +2 -2
  280. data/src/cxx_supportlib/ServerKit/HttpChunkedBodyParserState.h +2 -2
  281. data/src/cxx_supportlib/ServerKit/HttpClient.h +2 -2
  282. data/src/cxx_supportlib/ServerKit/HttpHeaderParser.h +105 -71
  283. data/src/cxx_supportlib/ServerKit/HttpHeaderParserState.h +6 -3
  284. data/src/cxx_supportlib/ServerKit/HttpRequest.h +4 -4
  285. data/src/cxx_supportlib/ServerKit/HttpRequestRef.h +2 -2
  286. data/src/cxx_supportlib/ServerKit/HttpServer.h +20 -14
  287. data/src/cxx_supportlib/ServerKit/Implementation.cpp +2 -2
  288. data/src/cxx_supportlib/ServerKit/Server.h +2 -8
  289. data/src/cxx_supportlib/ServerKit/llerrors.h +84 -0
  290. data/src/cxx_supportlib/ServerKit/llhttp.c +10168 -0
  291. data/src/cxx_supportlib/ServerKit/llhttp.h +903 -0
  292. data/src/cxx_supportlib/ServerKit/llhttp_api.c +510 -0
  293. data/src/cxx_supportlib/ServerKit/llhttp_http.c +170 -0
  294. data/src/cxx_supportlib/ServerKit/llversion.h +12 -0
  295. data/src/cxx_supportlib/ServerKit/url_parser.c +574 -0
  296. data/src/cxx_supportlib/ServerKit/url_parser.h +74 -0
  297. data/src/cxx_supportlib/StaticString.h +5 -3
  298. data/src/cxx_supportlib/StrIntTools/DateParsing.h +3 -3
  299. data/src/cxx_supportlib/StrIntTools/StrIntUtils.cpp +14 -5
  300. data/src/cxx_supportlib/StrIntTools/StrIntUtils.h +9 -4
  301. data/src/cxx_supportlib/StrIntTools/StrIntUtilsNoStrictAliasing.cpp +2 -2
  302. data/src/cxx_supportlib/StrIntTools/StringScanning.h +2 -2
  303. data/src/cxx_supportlib/StrIntTools/Template.h +2 -2
  304. data/src/cxx_supportlib/SystemTools/ContainerHelpers.h +2 -2
  305. data/src/cxx_supportlib/SystemTools/ProcessMetricsCollector.h +2 -2
  306. data/src/cxx_supportlib/SystemTools/SystemMetricsCollector.h +4 -6
  307. data/src/cxx_supportlib/SystemTools/SystemTime.cpp +2 -2
  308. data/src/cxx_supportlib/SystemTools/SystemTime.h +2 -2
  309. data/src/cxx_supportlib/SystemTools/UserDatabase.cpp +16 -16
  310. data/src/cxx_supportlib/SystemTools/UserDatabase.h +8 -12
  311. data/src/cxx_supportlib/Utils/AnsiColorConstants.h +13 -11
  312. data/src/cxx_supportlib/Utils/AsyncSignalSafeUtils.h +4 -2
  313. data/src/cxx_supportlib/Utils/BlockingQueue.h +2 -2
  314. data/src/cxx_supportlib/Utils/CachedFileStat.cpp +2 -2
  315. data/src/cxx_supportlib/Utils/CachedFileStat.h +2 -2
  316. data/src/cxx_supportlib/Utils/CachedFileStat.hpp +2 -2
  317. data/src/cxx_supportlib/Utils/ClassUtils.h +2 -2
  318. data/src/cxx_supportlib/Utils/Curl.h +2 -2
  319. data/src/cxx_supportlib/Utils/FastStringStream.h +9 -9
  320. data/src/cxx_supportlib/Utils/FileChangeChecker.h +2 -2
  321. data/src/cxx_supportlib/Utils/HttpConstants.h +2 -2
  322. data/src/cxx_supportlib/Utils/IniFile.h +26 -27
  323. data/src/cxx_supportlib/Utils/MessagePassing.h +2 -2
  324. data/src/cxx_supportlib/Utils/OptionParsing.h +2 -2
  325. data/src/cxx_supportlib/Utils/ReleaseableScopedPointer.h +2 -2
  326. data/src/cxx_supportlib/Utils/ScopeGuard.h +2 -2
  327. data/src/cxx_supportlib/Utils/SpeedMeter.h +2 -5
  328. data/src/cxx_supportlib/Utils/Timer.h +2 -2
  329. data/src/cxx_supportlib/Utils/VariantMap.h +2 -2
  330. data/src/cxx_supportlib/Utils.cpp +3 -3
  331. data/src/cxx_supportlib/Utils.h +2 -32
  332. data/src/cxx_supportlib/WatchdogLauncher.cpp +2 -2
  333. data/src/cxx_supportlib/WatchdogLauncher.h +3 -5
  334. data/src/cxx_supportlib/WrapperRegistry/CBindings.cpp +2 -2
  335. data/src/cxx_supportlib/WrapperRegistry/CBindings.h +2 -2
  336. data/src/cxx_supportlib/WrapperRegistry/Entry.h +2 -2
  337. data/src/cxx_supportlib/WrapperRegistry/Registry.h +2 -2
  338. data/src/cxx_supportlib/oxt/backtrace.hpp +1 -1
  339. data/src/cxx_supportlib/oxt/detail/backtrace_disabled.hpp +1 -1
  340. data/src/cxx_supportlib/oxt/detail/backtrace_enabled.hpp +1 -1
  341. data/src/cxx_supportlib/oxt/detail/context.hpp +1 -1
  342. data/src/cxx_supportlib/oxt/detail/spin_lock_darwin.hpp +1 -1
  343. data/src/cxx_supportlib/oxt/detail/spin_lock_gcc_x86.hpp +1 -1
  344. data/src/cxx_supportlib/oxt/detail/spin_lock_portable.hpp +1 -1
  345. data/src/cxx_supportlib/oxt/detail/spin_lock_pthreads.hpp +1 -1
  346. data/src/cxx_supportlib/oxt/detail/tracable_exception_disabled.hpp +5 -1
  347. data/src/cxx_supportlib/oxt/detail/tracable_exception_enabled.hpp +2 -1
  348. data/src/cxx_supportlib/oxt/dynamic_thread_group.hpp +1 -1
  349. data/src/cxx_supportlib/oxt/implementation.cpp +53 -4
  350. data/src/cxx_supportlib/oxt/initialize.hpp +1 -1
  351. data/src/cxx_supportlib/oxt/macros.hpp +1 -1
  352. data/src/cxx_supportlib/oxt/spin_lock.hpp +1 -1
  353. data/src/cxx_supportlib/oxt/system_calls.cpp +13 -5
  354. data/src/cxx_supportlib/oxt/system_calls.hpp +4 -5
  355. data/src/cxx_supportlib/oxt/thread.hpp +2 -2
  356. data/src/cxx_supportlib/oxt/tracable_exception.hpp +1 -1
  357. data/src/cxx_supportlib/vendor-copy/adhoc_lve.h +2 -2
  358. data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/detail/find_iterator.hpp +11 -3
  359. data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/find_iterator.hpp +27 -1
  360. data/src/cxx_supportlib/vendor-modified/boost/align/aligned_alloc.hpp +1 -1
  361. data/src/cxx_supportlib/vendor-modified/boost/align/detail/aligned_alloc_sunos.hpp +34 -0
  362. data/src/cxx_supportlib/vendor-modified/boost/assert/source_location.hpp +124 -26
  363. data/src/cxx_supportlib/vendor-modified/boost/atomic/atomic.hpp +10 -18
  364. data/src/cxx_supportlib/vendor-modified/boost/atomic/atomic_ref.hpp +4 -5
  365. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/addressof.hpp +5 -1
  366. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/atomic_impl.hpp +183 -64
  367. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/atomic_ref_impl.hpp +170 -68
  368. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/bitwise_cast.hpp +83 -12
  369. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/bitwise_fp_cast.hpp +40 -11
  370. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/caps_arch_gcc_aarch32.hpp +8 -1
  371. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/caps_arch_gcc_aarch64.hpp +8 -1
  372. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/caps_arch_gcc_arm.hpp +8 -1
  373. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/classify.hpp +19 -10
  374. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/config.hpp +19 -54
  375. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_arch_ops_gcc_ppc.hpp +105 -100
  376. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_arch_ops_gcc_x86.hpp +107 -40
  377. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_arch_ops_msvc_x86.hpp +32 -5
  378. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_operations_emulated.hpp +12 -13
  379. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_fp_ops_emulated.hpp +7 -8
  380. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_fp_ops_generic.hpp +1 -1
  381. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_ops_emulated.hpp +26 -27
  382. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_ops_gcc_ppc.hpp +73 -72
  383. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/float_sizes.hpp +122 -35
  384. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fp_ops_emulated.hpp +2 -3
  385. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/futex.hpp +50 -12
  386. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/gcc_arm_asm_common.hpp +4 -0
  387. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/gcc_ppc_asm_common.hpp +33 -0
  388. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/pause.hpp +7 -0
  389. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/platform.hpp +15 -6
  390. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/alignment_of.hpp +3 -3
  391. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/has_unique_object_representations.hpp +143 -0
  392. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/is_enum.hpp +42 -0
  393. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/is_nothrow_default_constructible.hpp +46 -0
  394. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/remove_cv.hpp +42 -0
  395. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_caps_darwin_ulock.hpp +58 -0
  396. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_on_address.hpp +64 -0
  397. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_ops_darwin_ulock.hpp +158 -0
  398. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_ops_emulated.hpp +3 -4
  399. data/src/cxx_supportlib/vendor-modified/boost/atomic/ipc_atomic.hpp +10 -5
  400. data/src/cxx_supportlib/vendor-modified/boost/atomic/ipc_atomic_ref.hpp +4 -5
  401. data/src/cxx_supportlib/vendor-modified/boost/bind/apply.hpp +2 -60
  402. data/src/cxx_supportlib/vendor-modified/boost/bind/bind.hpp +257 -1789
  403. data/src/cxx_supportlib/vendor-modified/boost/bind/{bind_cc.hpp → detail/bind_cc.hpp} +20 -20
  404. data/src/cxx_supportlib/vendor-modified/boost/bind/detail/bind_mf2_cc.hpp +210 -0
  405. data/src/cxx_supportlib/vendor-modified/boost/bind/detail/bind_mf_cc.hpp +405 -0
  406. data/src/cxx_supportlib/vendor-modified/boost/bind/detail/integer_sequence.hpp +111 -0
  407. data/src/cxx_supportlib/vendor-modified/boost/bind/detail/result_traits.hpp +13 -2
  408. data/src/cxx_supportlib/vendor-modified/boost/bind/detail/tuple_for_each.hpp +64 -0
  409. data/src/cxx_supportlib/vendor-modified/boost/bind/mem_fn.hpp +140 -290
  410. data/src/cxx_supportlib/vendor-modified/boost/bind/placeholders.hpp +3 -16
  411. data/src/cxx_supportlib/vendor-modified/boost/bind/protect.hpp +0 -279
  412. data/src/cxx_supportlib/vendor-modified/boost/bind/std_placeholders.hpp +0 -6
  413. data/src/cxx_supportlib/vendor-modified/boost/chrono/config.hpp +2 -0
  414. data/src/cxx_supportlib/vendor-modified/boost/chrono/detail/inlined/mac/chrono.hpp +4 -4
  415. data/src/cxx_supportlib/vendor-modified/boost/chrono/detail/is_evenly_divisible_by.hpp +1 -7
  416. data/src/cxx_supportlib/vendor-modified/boost/chrono/detail/requires_cxx11.hpp +23 -0
  417. data/src/cxx_supportlib/vendor-modified/boost/chrono/detail/scan_keyword.hpp +4 -2
  418. data/src/cxx_supportlib/vendor-modified/boost/chrono/duration.hpp +10 -6
  419. data/src/cxx_supportlib/vendor-modified/boost/chrono/io/duration_get.hpp +1 -1
  420. data/src/cxx_supportlib/vendor-modified/boost/chrono/io/duration_io.hpp +4 -4
  421. data/src/cxx_supportlib/vendor-modified/boost/chrono/io/duration_put.hpp +5 -5
  422. data/src/cxx_supportlib/vendor-modified/boost/chrono/io/duration_style.hpp +1 -1
  423. data/src/cxx_supportlib/vendor-modified/boost/chrono/io/duration_units.hpp +3 -2
  424. data/src/cxx_supportlib/vendor-modified/boost/chrono/io/time_point_io.hpp +3 -3
  425. data/src/cxx_supportlib/vendor-modified/boost/chrono/io/timezone.hpp +2 -1
  426. data/src/cxx_supportlib/vendor-modified/boost/chrono/io/utility/ios_base_state_ptr.hpp +7 -7
  427. data/src/cxx_supportlib/vendor-modified/boost/chrono/io_v1/chrono_io.hpp +3 -3
  428. data/src/cxx_supportlib/vendor-modified/boost/chrono/system_clocks.hpp +1 -0
  429. data/src/cxx_supportlib/vendor-modified/boost/chrono/time_point.hpp +1 -1
  430. data/src/cxx_supportlib/vendor-modified/boost/circular_buffer/details.hpp +5 -1
  431. data/src/cxx_supportlib/vendor-modified/boost/config/assert_cxx03.hpp +1 -1
  432. data/src/cxx_supportlib/vendor-modified/boost/config/assert_cxx11.hpp +4 -4
  433. data/src/cxx_supportlib/vendor-modified/boost/config/assert_cxx14.hpp +1 -1
  434. data/src/cxx_supportlib/vendor-modified/boost/config/assert_cxx17.hpp +7 -1
  435. data/src/cxx_supportlib/vendor-modified/boost/config/assert_cxx20.hpp +4 -1
  436. data/src/cxx_supportlib/vendor-modified/boost/config/assert_cxx23.hpp +41 -0
  437. data/src/cxx_supportlib/vendor-modified/boost/config/auto_link.hpp +6 -1
  438. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/borland.hpp +4 -0
  439. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/clang.hpp +20 -3
  440. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/clang_version.hpp +89 -0
  441. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/codegear.hpp +5 -0
  442. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/common_edg.hpp +4 -1
  443. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/cray.hpp +1 -0
  444. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/digitalmars.hpp +4 -0
  445. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/gcc.hpp +16 -5
  446. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/gcc_xml.hpp +4 -2
  447. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/hp_acc.hpp +5 -0
  448. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/intel.hpp +1 -0
  449. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/metrowerks.hpp +4 -0
  450. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/mpw.hpp +4 -0
  451. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/nvcc.hpp +6 -0
  452. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/pathscale.hpp +4 -0
  453. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/sunpro_cc.hpp +10 -0
  454. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/vacpp.hpp +4 -0
  455. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/visualc.hpp +23 -3
  456. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/xlcpp.hpp +13 -0
  457. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/xlcpp_zos.hpp +2 -0
  458. data/src/cxx_supportlib/vendor-modified/boost/config/detail/cxx_composite.hpp +19 -3
  459. data/src/cxx_supportlib/vendor-modified/boost/config/detail/suffix.hpp +139 -34
  460. data/src/cxx_supportlib/vendor-modified/boost/config/header_deprecated.hpp +1 -1
  461. data/src/cxx_supportlib/vendor-modified/boost/config/platform/wasm.hpp +6 -0
  462. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/dinkumware.hpp +45 -18
  463. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/libcpp.hpp +11 -45
  464. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/libstdcpp3.hpp +42 -3
  465. data/src/cxx_supportlib/vendor-modified/boost/config/workaround.hpp +11 -0
  466. data/src/cxx_supportlib/vendor-modified/boost/container/adaptive_pool.hpp +26 -21
  467. data/src/cxx_supportlib/vendor-modified/boost/container/allocator.hpp +30 -26
  468. data/src/cxx_supportlib/vendor-modified/boost/container/allocator_traits.hpp +178 -39
  469. data/src/cxx_supportlib/vendor-modified/boost/container/container_fwd.hpp +12 -12
  470. data/src/cxx_supportlib/vendor-modified/boost/container/deque.hpp +827 -303
  471. data/src/cxx_supportlib/vendor-modified/boost/container/detail/adaptive_node_pool.hpp +1 -1
  472. data/src/cxx_supportlib/vendor-modified/boost/container/detail/adaptive_node_pool_impl.hpp +57 -57
  473. data/src/cxx_supportlib/vendor-modified/boost/container/detail/addressof.hpp +2 -10
  474. data/src/cxx_supportlib/vendor-modified/boost/container/detail/advanced_insert_int.hpp +155 -179
  475. data/src/cxx_supportlib/vendor-modified/boost/container/detail/alloc_helpers.hpp +6 -6
  476. data/src/cxx_supportlib/vendor-modified/boost/container/detail/allocation_type.hpp +7 -7
  477. data/src/cxx_supportlib/vendor-modified/boost/container/detail/allocator_version_traits.hpp +14 -15
  478. data/src/cxx_supportlib/vendor-modified/boost/container/detail/block_list.hpp +2 -2
  479. data/src/cxx_supportlib/vendor-modified/boost/container/detail/block_slist.hpp +2 -2
  480. data/src/cxx_supportlib/vendor-modified/boost/container/detail/compare_functors.hpp +24 -21
  481. data/src/cxx_supportlib/vendor-modified/boost/container/detail/config_begin.hpp +12 -0
  482. data/src/cxx_supportlib/vendor-modified/boost/container/detail/config_end.hpp +3 -0
  483. data/src/cxx_supportlib/vendor-modified/boost/container/detail/construct_in_place.hpp +52 -16
  484. data/src/cxx_supportlib/vendor-modified/boost/container/detail/container_or_allocator_rebind.hpp +1 -2
  485. data/src/cxx_supportlib/vendor-modified/boost/container/detail/container_rebind.hpp +23 -13
  486. data/src/cxx_supportlib/vendor-modified/boost/container/detail/copy_move_algo.hpp +891 -182
  487. data/src/cxx_supportlib/vendor-modified/boost/container/detail/destroyers.hpp +121 -66
  488. data/src/cxx_supportlib/vendor-modified/boost/container/detail/dispatch_uses_allocator.hpp +42 -42
  489. data/src/cxx_supportlib/vendor-modified/boost/container/detail/flat_tree.hpp +310 -231
  490. data/src/cxx_supportlib/vendor-modified/boost/container/detail/function_detector.hpp +1 -1
  491. data/src/cxx_supportlib/vendor-modified/boost/container/detail/is_container.hpp +2 -2
  492. data/src/cxx_supportlib/vendor-modified/boost/container/detail/is_contiguous_container.hpp +16 -12
  493. data/src/cxx_supportlib/vendor-modified/boost/container/detail/is_pair.hpp +91 -0
  494. data/src/cxx_supportlib/vendor-modified/boost/container/detail/iterator.hpp +8 -0
  495. data/src/cxx_supportlib/vendor-modified/boost/container/detail/iterators.hpp +213 -195
  496. data/src/cxx_supportlib/vendor-modified/boost/container/detail/math_functions.hpp +10 -11
  497. data/src/cxx_supportlib/vendor-modified/boost/container/detail/mpl.hpp +4 -4
  498. data/src/cxx_supportlib/vendor-modified/boost/container/detail/multiallocation_chain.hpp +98 -12
  499. data/src/cxx_supportlib/vendor-modified/boost/container/detail/mutex.hpp +48 -12
  500. data/src/cxx_supportlib/vendor-modified/boost/container/detail/next_capacity.hpp +8 -10
  501. data/src/cxx_supportlib/vendor-modified/boost/container/detail/node_alloc_holder.hpp +268 -120
  502. data/src/cxx_supportlib/vendor-modified/boost/container/detail/node_pool.hpp +1 -1
  503. data/src/cxx_supportlib/vendor-modified/boost/container/detail/node_pool_impl.hpp +12 -12
  504. data/src/cxx_supportlib/vendor-modified/boost/container/detail/pair.hpp +49 -122
  505. data/src/cxx_supportlib/vendor-modified/boost/container/detail/placement_new.hpp +1 -7
  506. data/src/cxx_supportlib/vendor-modified/boost/container/detail/pool_common.hpp +1 -1
  507. data/src/cxx_supportlib/vendor-modified/boost/container/detail/pool_common_alloc.hpp +2 -2
  508. data/src/cxx_supportlib/vendor-modified/boost/container/detail/pool_resource.hpp +7 -11
  509. data/src/cxx_supportlib/vendor-modified/boost/container/detail/transform_iterator.hpp +28 -28
  510. data/src/cxx_supportlib/vendor-modified/boost/container/detail/tree.hpp +265 -354
  511. data/src/cxx_supportlib/vendor-modified/boost/container/detail/type_traits.hpp +1 -0
  512. data/src/cxx_supportlib/vendor-modified/boost/container/detail/value_init.hpp +3 -3
  513. data/src/cxx_supportlib/vendor-modified/boost/container/detail/version_type.hpp +4 -4
  514. data/src/cxx_supportlib/vendor-modified/boost/container/detail/workaround.hpp +93 -11
  515. data/src/cxx_supportlib/vendor-modified/boost/container/devector.hpp +1364 -1296
  516. data/src/cxx_supportlib/vendor-modified/boost/container/flat_map.hpp +367 -260
  517. data/src/cxx_supportlib/vendor-modified/boost/container/flat_set.hpp +112 -93
  518. data/src/cxx_supportlib/vendor-modified/boost/container/list.hpp +80 -125
  519. data/src/cxx_supportlib/vendor-modified/boost/container/map.hpp +136 -119
  520. data/src/cxx_supportlib/vendor-modified/boost/container/new_allocator.hpp +19 -14
  521. data/src/cxx_supportlib/vendor-modified/boost/container/node_allocator.hpp +27 -21
  522. data/src/cxx_supportlib/vendor-modified/boost/container/node_handle.hpp +35 -22
  523. data/src/cxx_supportlib/vendor-modified/boost/container/options.hpp +158 -45
  524. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/memory_resource.hpp +8 -3
  525. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/monotonic_buffer_resource.hpp +4 -4
  526. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/polymorphic_allocator.hpp +1 -0
  527. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/resource_adaptor.hpp +7 -7
  528. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/synchronized_pool_resource.hpp +3 -3
  529. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/unsynchronized_pool_resource.hpp +3 -3
  530. data/src/cxx_supportlib/vendor-modified/boost/container/scoped_allocator.hpp +81 -83
  531. data/src/cxx_supportlib/vendor-modified/boost/container/set.hpp +93 -90
  532. data/src/cxx_supportlib/vendor-modified/boost/container/slist.hpp +82 -127
  533. data/src/cxx_supportlib/vendor-modified/boost/container/small_vector.hpp +229 -245
  534. data/src/cxx_supportlib/vendor-modified/boost/container/stable_vector.hpp +198 -175
  535. data/src/cxx_supportlib/vendor-modified/boost/container/static_vector.hpp +131 -87
  536. data/src/cxx_supportlib/vendor-modified/boost/container/string.hpp +373 -374
  537. data/src/cxx_supportlib/vendor-modified/boost/container/throw_exception.hpp +6 -7
  538. data/src/cxx_supportlib/vendor-modified/boost/container/uses_allocator.hpp +3 -3
  539. data/src/cxx_supportlib/vendor-modified/boost/container/vector.hpp +618 -631
  540. data/src/cxx_supportlib/vendor-modified/boost/container_hash/detail/hash_integral.hpp +146 -0
  541. data/src/cxx_supportlib/vendor-modified/boost/container_hash/detail/hash_mix.hpp +113 -0
  542. data/src/cxx_supportlib/vendor-modified/boost/container_hash/detail/hash_range.hpp +408 -0
  543. data/src/cxx_supportlib/vendor-modified/boost/container_hash/detail/hash_tuple_like.hpp +62 -0
  544. data/src/cxx_supportlib/vendor-modified/boost/container_hash/detail/mulx.hpp +79 -0
  545. data/src/cxx_supportlib/vendor-modified/boost/container_hash/hash.hpp +395 -581
  546. data/src/cxx_supportlib/vendor-modified/boost/container_hash/hash_fwd.hpp +25 -24
  547. data/src/cxx_supportlib/vendor-modified/boost/container_hash/is_contiguous_range.hpp +98 -0
  548. data/src/cxx_supportlib/vendor-modified/boost/container_hash/is_described_class.hpp +37 -0
  549. data/src/cxx_supportlib/vendor-modified/boost/container_hash/is_range.hpp +41 -0
  550. data/src/cxx_supportlib/vendor-modified/boost/container_hash/is_tuple_like.hpp +36 -0
  551. data/src/cxx_supportlib/vendor-modified/boost/container_hash/is_unordered_range.hpp +38 -0
  552. data/src/cxx_supportlib/vendor-modified/boost/core/alignof.hpp +57 -0
  553. data/src/cxx_supportlib/vendor-modified/boost/core/alloc_construct.hpp +7 -81
  554. data/src/cxx_supportlib/vendor-modified/boost/core/allocator_access.hpp +448 -215
  555. data/src/cxx_supportlib/vendor-modified/boost/core/allocator_traits.hpp +112 -0
  556. data/src/cxx_supportlib/vendor-modified/boost/core/bit.hpp +418 -45
  557. data/src/cxx_supportlib/vendor-modified/boost/core/checked_delete.hpp +29 -3
  558. data/src/cxx_supportlib/vendor-modified/boost/core/cmath.hpp +100 -1
  559. data/src/cxx_supportlib/vendor-modified/boost/core/data.hpp +46 -0
  560. data/src/cxx_supportlib/vendor-modified/boost/core/default_allocator.hpp +19 -9
  561. data/src/cxx_supportlib/vendor-modified/boost/core/detail/is_same.hpp +39 -0
  562. data/src/cxx_supportlib/vendor-modified/boost/core/detail/lwt_unattended.hpp +66 -0
  563. data/src/cxx_supportlib/vendor-modified/boost/core/detail/minstd_rand.hpp +58 -0
  564. data/src/cxx_supportlib/vendor-modified/boost/core/detail/sp_thread_pause.hpp +71 -0
  565. data/src/cxx_supportlib/vendor-modified/boost/{smart_ptr → core}/detail/sp_thread_sleep.hpp +39 -21
  566. data/src/cxx_supportlib/vendor-modified/boost/core/detail/sp_thread_yield.hpp +100 -0
  567. data/src/cxx_supportlib/vendor-modified/boost/core/detail/splitmix64.hpp +3 -3
  568. data/src/cxx_supportlib/vendor-modified/boost/core/detail/string_view.hpp +1272 -0
  569. data/src/cxx_supportlib/vendor-modified/boost/core/empty_value.hpp +78 -21
  570. data/src/cxx_supportlib/vendor-modified/boost/core/fclose_deleter.hpp +53 -0
  571. data/src/cxx_supportlib/vendor-modified/boost/core/functor.hpp +41 -0
  572. data/src/cxx_supportlib/vendor-modified/boost/core/identity.hpp +61 -0
  573. data/src/cxx_supportlib/vendor-modified/boost/core/invoke_swap.hpp +93 -0
  574. data/src/cxx_supportlib/vendor-modified/boost/core/is_same.hpp +10 -15
  575. data/src/cxx_supportlib/vendor-modified/boost/core/launder.hpp +69 -0
  576. data/src/cxx_supportlib/vendor-modified/boost/core/lightweight_test.hpp +41 -37
  577. data/src/cxx_supportlib/vendor-modified/boost/core/lightweight_test_trait.hpp +8 -54
  578. data/src/cxx_supportlib/vendor-modified/boost/core/make_span.hpp +59 -0
  579. data/src/cxx_supportlib/vendor-modified/boost/core/max_align.hpp +82 -0
  580. data/src/cxx_supportlib/vendor-modified/boost/core/memory_resource.hpp +108 -0
  581. data/src/cxx_supportlib/vendor-modified/boost/core/noinit_adaptor.hpp +3 -0
  582. data/src/cxx_supportlib/vendor-modified/boost/core/noncopyable.hpp +1 -1
  583. data/src/cxx_supportlib/vendor-modified/boost/core/null_deleter.hpp +7 -0
  584. data/src/cxx_supportlib/vendor-modified/boost/core/pointer_in_range.hpp +49 -0
  585. data/src/cxx_supportlib/vendor-modified/boost/core/pointer_traits.hpp +111 -60
  586. data/src/cxx_supportlib/vendor-modified/boost/core/quick_exit.hpp +1 -1
  587. data/src/cxx_supportlib/vendor-modified/boost/core/ref.hpp +23 -16
  588. data/src/cxx_supportlib/vendor-modified/boost/core/serialization.hpp +131 -0
  589. data/src/cxx_supportlib/vendor-modified/boost/core/size.hpp +31 -0
  590. data/src/cxx_supportlib/vendor-modified/boost/core/snprintf.hpp +173 -0
  591. data/src/cxx_supportlib/vendor-modified/boost/core/span.hpp +401 -0
  592. data/src/cxx_supportlib/vendor-modified/boost/core/swap.hpp +10 -40
  593. data/src/cxx_supportlib/vendor-modified/boost/core/type_name.hpp +1186 -0
  594. data/src/cxx_supportlib/vendor-modified/boost/core/verbose_terminate_handler.hpp +88 -0
  595. data/src/cxx_supportlib/vendor-modified/boost/core/yield_primitives.hpp +12 -0
  596. data/src/cxx_supportlib/vendor-modified/boost/date_time/date.hpp +1 -1
  597. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/formatters.hpp +3 -3
  598. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/formatters_limited.hpp +3 -3
  599. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/greg_date.hpp +12 -13
  600. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/parsers.hpp +2 -2
  601. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian_calendar.ipp +3 -3
  602. data/src/cxx_supportlib/vendor-modified/boost/date_time/iso_format.hpp +13 -13
  603. data/src/cxx_supportlib/vendor-modified/boost/date_time/local_time/local_date_time.hpp +2 -2
  604. data/src/cxx_supportlib/vendor-modified/boost/date_time/posix_time/conversion.hpp +1 -1
  605. data/src/cxx_supportlib/vendor-modified/boost/date_time/posix_time/posix_time_io.hpp +1 -1
  606. data/src/cxx_supportlib/vendor-modified/boost/date_time/posix_time/time_formatters.hpp +4 -4
  607. data/src/cxx_supportlib/vendor-modified/boost/date_time/posix_time/time_formatters_limited.hpp +2 -2
  608. data/src/cxx_supportlib/vendor-modified/boost/date_time/special_values_parser.hpp +1 -1
  609. data/src/cxx_supportlib/vendor-modified/boost/date_time/time_facet.hpp +1 -1
  610. data/src/cxx_supportlib/vendor-modified/boost/date_time/time_parsing.hpp +2 -2
  611. data/src/cxx_supportlib/vendor-modified/boost/describe/bases.hpp +50 -0
  612. data/src/cxx_supportlib/vendor-modified/boost/describe/detail/config.hpp +40 -0
  613. data/src/cxx_supportlib/vendor-modified/boost/describe/detail/cx_streq.hpp +30 -0
  614. data/src/cxx_supportlib/vendor-modified/boost/describe/detail/void_t.hpp +32 -0
  615. data/src/cxx_supportlib/vendor-modified/boost/describe/members.hpp +161 -0
  616. data/src/cxx_supportlib/vendor-modified/boost/describe/modifiers.hpp +33 -0
  617. data/src/cxx_supportlib/vendor-modified/boost/detail/basic_pointerbuf.hpp +3 -7
  618. data/src/cxx_supportlib/vendor-modified/boost/detail/lcast_precision.hpp +24 -126
  619. data/src/cxx_supportlib/vendor-modified/boost/detail/workaround.hpp +3 -3
  620. data/src/cxx_supportlib/vendor-modified/boost/exception/current_exception_cast.hpp +1 -1
  621. data/src/cxx_supportlib/vendor-modified/boost/exception/detail/clone_current_exception.hpp +1 -1
  622. data/src/cxx_supportlib/vendor-modified/boost/exception/detail/error_info_impl.hpp +1 -1
  623. data/src/cxx_supportlib/vendor-modified/boost/exception/detail/exception_ptr.hpp +58 -30
  624. data/src/cxx_supportlib/vendor-modified/boost/exception/detail/is_output_streamable.hpp +1 -1
  625. data/src/cxx_supportlib/vendor-modified/boost/exception/detail/object_hex_dump.hpp +1 -1
  626. data/src/cxx_supportlib/vendor-modified/boost/exception/detail/requires_cxx11.hpp +24 -0
  627. data/src/cxx_supportlib/vendor-modified/boost/exception/detail/type_info.hpp +1 -1
  628. data/src/cxx_supportlib/vendor-modified/boost/exception/diagnostic_information.hpp +4 -4
  629. data/src/cxx_supportlib/vendor-modified/boost/exception/exception.hpp +85 -3
  630. data/src/cxx_supportlib/vendor-modified/boost/exception/get_error_info.hpp +1 -1
  631. data/src/cxx_supportlib/vendor-modified/boost/exception/info.hpp +2 -2
  632. data/src/cxx_supportlib/vendor-modified/boost/exception/to_string.hpp +2 -2
  633. data/src/cxx_supportlib/vendor-modified/boost/exception/to_string_stub.hpp +1 -1
  634. data/src/cxx_supportlib/vendor-modified/boost/function/function0.hpp +1 -3
  635. data/src/cxx_supportlib/vendor-modified/boost/function/function1.hpp +1 -3
  636. data/src/cxx_supportlib/vendor-modified/boost/function/function10.hpp +1 -3
  637. data/src/cxx_supportlib/vendor-modified/boost/function/function2.hpp +1 -3
  638. data/src/cxx_supportlib/vendor-modified/boost/function/function3.hpp +1 -3
  639. data/src/cxx_supportlib/vendor-modified/boost/function/function4.hpp +1 -3
  640. data/src/cxx_supportlib/vendor-modified/boost/function/function5.hpp +1 -3
  641. data/src/cxx_supportlib/vendor-modified/boost/function/function6.hpp +1 -3
  642. data/src/cxx_supportlib/vendor-modified/boost/function/function7.hpp +1 -3
  643. data/src/cxx_supportlib/vendor-modified/boost/function/function8.hpp +1 -3
  644. data/src/cxx_supportlib/vendor-modified/boost/function/function9.hpp +1 -3
  645. data/src/cxx_supportlib/vendor-modified/boost/function/function_base.hpp +71 -223
  646. data/src/cxx_supportlib/vendor-modified/boost/function/function_fwd.hpp +36 -41
  647. data/src/cxx_supportlib/vendor-modified/boost/function/function_template.hpp +428 -452
  648. data/src/cxx_supportlib/vendor-modified/boost/function/function_typeof.hpp +1 -31
  649. data/src/cxx_supportlib/vendor-modified/boost/function.hpp +5 -61
  650. data/src/cxx_supportlib/vendor-modified/boost/integer/common_factor_rt.hpp +6 -10
  651. data/src/cxx_supportlib/vendor-modified/boost/integer/extended_euclidean.hpp +2 -2
  652. data/src/cxx_supportlib/vendor-modified/boost/integer/integer_log2.hpp +85 -80
  653. data/src/cxx_supportlib/vendor-modified/boost/intrusive/avl_set.hpp +32 -25
  654. data/src/cxx_supportlib/vendor-modified/boost/intrusive/avltree.hpp +16 -13
  655. data/src/cxx_supportlib/vendor-modified/boost/intrusive/avltree_algorithms.hpp +45 -45
  656. data/src/cxx_supportlib/vendor-modified/boost/intrusive/bs_set.hpp +32 -25
  657. data/src/cxx_supportlib/vendor-modified/boost/intrusive/bstree.hpp +104 -97
  658. data/src/cxx_supportlib/vendor-modified/boost/intrusive/bstree_algorithms.hpp +87 -90
  659. data/src/cxx_supportlib/vendor-modified/boost/intrusive/circular_list_algorithms.hpp +29 -20
  660. data/src/cxx_supportlib/vendor-modified/boost/intrusive/circular_slist_algorithms.hpp +77 -8
  661. data/src/cxx_supportlib/vendor-modified/boost/intrusive/derivation_value_traits.hpp +2 -2
  662. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/algorithm.hpp +8 -8
  663. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/any_node_and_algorithms.hpp +30 -30
  664. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/array_initializer.hpp +8 -7
  665. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/avltree_node.hpp +14 -14
  666. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/bstree_algorithms_base.hpp +38 -39
  667. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/common_slist_algorithms.hpp +84 -15
  668. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/default_header_holder.hpp +3 -3
  669. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/ebo_functor_holder.hpp +24 -24
  670. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/empty_node_checker.hpp +1 -1
  671. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/equal_to_value.hpp +1 -1
  672. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/exception_disposer.hpp +1 -32
  673. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/function_detector.hpp +1 -1
  674. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/generic_hook.hpp +14 -15
  675. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/hash.hpp +277 -0
  676. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/hash_combine.hpp +11 -49
  677. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/hash_integral.hpp +119 -0
  678. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/hash_mix.hpp +130 -0
  679. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/hashtable_node.hpp +195 -115
  680. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/hook_traits.hpp +22 -26
  681. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/iiterator.hpp +6 -6
  682. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/iterator.hpp +121 -75
  683. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/key_nodeptr_comp.hpp +7 -7
  684. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/list_iterator.hpp +20 -20
  685. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/list_node.hpp +4 -4
  686. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/math.hpp +3 -3
  687. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/mpl.hpp +7 -1
  688. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/node_cloner_disposer.hpp +3 -3
  689. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/node_to_value.hpp +1 -1
  690. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/parent_from_member.hpp +7 -17
  691. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/rbtree_node.hpp +18 -18
  692. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/reverse_iterator.hpp +3 -140
  693. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/simple_disposers.hpp +1 -1
  694. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/size_holder.hpp +14 -14
  695. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/slist_iterator.hpp +26 -19
  696. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/slist_node.hpp +2 -2
  697. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/transform_iterator.hpp +22 -22
  698. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/tree_iterator.hpp +21 -21
  699. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/tree_node.hpp +6 -6
  700. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/tree_value_compare.hpp +28 -28
  701. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/value_functors.hpp +10 -0
  702. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/workaround.hpp +70 -3
  703. data/src/cxx_supportlib/vendor-modified/boost/intrusive/hashtable.hpp +1722 -995
  704. data/src/cxx_supportlib/vendor-modified/boost/intrusive/intrusive_fwd.hpp +2 -0
  705. data/src/cxx_supportlib/vendor-modified/boost/intrusive/linear_slist_algorithms.hpp +84 -11
  706. data/src/cxx_supportlib/vendor-modified/boost/intrusive/list.hpp +68 -63
  707. data/src/cxx_supportlib/vendor-modified/boost/intrusive/member_value_traits.hpp +2 -2
  708. data/src/cxx_supportlib/vendor-modified/boost/intrusive/options.hpp +17 -3
  709. data/src/cxx_supportlib/vendor-modified/boost/intrusive/pack_options.hpp +15 -11
  710. data/src/cxx_supportlib/vendor-modified/boost/intrusive/pointer_traits.hpp +12 -4
  711. data/src/cxx_supportlib/vendor-modified/boost/intrusive/priority_compare.hpp +11 -4
  712. data/src/cxx_supportlib/vendor-modified/boost/intrusive/rbtree.hpp +16 -13
  713. data/src/cxx_supportlib/vendor-modified/boost/intrusive/rbtree_algorithms.hpp +38 -38
  714. data/src/cxx_supportlib/vendor-modified/boost/intrusive/set.hpp +32 -25
  715. data/src/cxx_supportlib/vendor-modified/boost/intrusive/sg_set.hpp +32 -25
  716. data/src/cxx_supportlib/vendor-modified/boost/intrusive/sgtree.hpp +18 -15
  717. data/src/cxx_supportlib/vendor-modified/boost/intrusive/sgtree_algorithms.hpp +22 -22
  718. data/src/cxx_supportlib/vendor-modified/boost/intrusive/slist.hpp +80 -79
  719. data/src/cxx_supportlib/vendor-modified/boost/intrusive/splay_set.hpp +32 -25
  720. data/src/cxx_supportlib/vendor-modified/boost/intrusive/splaytree.hpp +16 -13
  721. data/src/cxx_supportlib/vendor-modified/boost/intrusive/splaytree_algorithms.hpp +38 -36
  722. data/src/cxx_supportlib/vendor-modified/boost/intrusive/treap.hpp +22 -19
  723. data/src/cxx_supportlib/vendor-modified/boost/intrusive/treap_algorithms.hpp +25 -21
  724. data/src/cxx_supportlib/vendor-modified/boost/intrusive/treap_set.hpp +44 -37
  725. data/src/cxx_supportlib/vendor-modified/boost/intrusive/trivial_value_traits.hpp +2 -2
  726. data/src/cxx_supportlib/vendor-modified/boost/intrusive/unordered_set.hpp +64 -54
  727. data/src/cxx_supportlib/vendor-modified/boost/intrusive/unordered_set_hook.hpp +11 -11
  728. data/src/cxx_supportlib/vendor-modified/boost/io/ios_state.hpp +2 -2
  729. data/src/cxx_supportlib/vendor-modified/boost/iterator/advance.hpp +11 -0
  730. data/src/cxx_supportlib/vendor-modified/boost/iterator/detail/config_def.hpp +6 -6
  731. data/src/cxx_supportlib/vendor-modified/boost/iterator/detail/config_undef.hpp +1 -1
  732. data/src/cxx_supportlib/vendor-modified/boost/iterator/detail/enable_if.hpp +5 -5
  733. data/src/cxx_supportlib/vendor-modified/boost/iterator/detail/facade_iterator_category.hpp +10 -11
  734. data/src/cxx_supportlib/vendor-modified/boost/iterator/is_iterator.hpp +148 -0
  735. data/src/cxx_supportlib/vendor-modified/boost/iterator/iterator_concepts.hpp +2 -2
  736. data/src/cxx_supportlib/vendor-modified/boost/iterator/iterator_facade.hpp +106 -25
  737. data/src/cxx_supportlib/vendor-modified/boost/iterator/transform_iterator.hpp +8 -4
  738. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/bad_lexical_cast.hpp +7 -13
  739. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/buffer_view.hpp +59 -0
  740. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_lexical.hpp +113 -131
  741. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_lexical_streams.hpp +618 -646
  742. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_numeric.hpp +83 -74
  743. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/inf_nan.hpp +26 -33
  744. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/is_character.hpp +22 -29
  745. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/lcast_basic_unlockedbuf.hpp +73 -0
  746. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/lcast_char_constants.hpp +1 -1
  747. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/lcast_unsigned_converters.hpp +23 -18
  748. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/widest_char.hpp +7 -9
  749. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/try_lexical_convert.hpp +22 -161
  750. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast.hpp +9 -12
  751. data/src/cxx_supportlib/vendor-modified/boost/libs/chrono/src/chrono.cpp +4 -2
  752. data/src/cxx_supportlib/vendor-modified/boost/libs/chrono/src/process_cpu_clocks.cpp +3 -1
  753. data/src/cxx_supportlib/vendor-modified/boost/libs/chrono/src/thread_clock.cpp +3 -1
  754. data/src/cxx_supportlib/vendor-modified/boost/libs/random/src/random_device.cpp +3 -1
  755. data/src/cxx_supportlib/vendor-modified/boost/libs/regex/src/posix_api.cpp +10 -18
  756. data/src/cxx_supportlib/vendor-modified/boost/libs/regex/src/wide_posix_api.cpp +13 -14
  757. data/src/cxx_supportlib/vendor-modified/boost/libs/thread/src/pthread/thread.cpp +24 -14
  758. data/src/cxx_supportlib/vendor-modified/boost/limits.hpp +12 -12
  759. data/src/cxx_supportlib/vendor-modified/boost/move/adl_move_swap.hpp +7 -5
  760. data/src/cxx_supportlib/vendor-modified/boost/move/algo/adaptive_merge.hpp +48 -33
  761. data/src/cxx_supportlib/vendor-modified/boost/move/algo/adaptive_sort.hpp +92 -75
  762. data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/adaptive_sort_merge.hpp +216 -185
  763. data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/basic_op.hpp +11 -10
  764. data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/heap_sort.hpp +22 -11
  765. data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/insertion_sort.hpp +9 -0
  766. data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/merge.hpp +125 -165
  767. data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/merge_sort.hpp +24 -15
  768. data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/pdqsort.hpp +16 -5
  769. data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/search.hpp +79 -0
  770. data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/set_difference.hpp +8 -2
  771. data/src/cxx_supportlib/vendor-modified/boost/move/algo/move.hpp +8 -5
  772. data/src/cxx_supportlib/vendor-modified/boost/move/algo/predicate.hpp +11 -11
  773. data/src/cxx_supportlib/vendor-modified/boost/move/algorithm.hpp +0 -1
  774. data/src/cxx_supportlib/vendor-modified/boost/move/core.hpp +22 -1
  775. data/src/cxx_supportlib/vendor-modified/boost/move/default_delete.hpp +5 -6
  776. data/src/cxx_supportlib/vendor-modified/boost/move/detail/addressof.hpp +61 -0
  777. data/src/cxx_supportlib/vendor-modified/boost/move/detail/config_begin.hpp +0 -1
  778. data/src/cxx_supportlib/vendor-modified/boost/move/detail/force_ptr.hpp +36 -0
  779. data/src/cxx_supportlib/vendor-modified/boost/move/detail/iterator_to_raw_pointer.hpp +3 -3
  780. data/src/cxx_supportlib/vendor-modified/boost/move/detail/iterator_traits.hpp +108 -9
  781. data/src/cxx_supportlib/vendor-modified/boost/move/detail/launder.hpp +53 -0
  782. data/src/cxx_supportlib/vendor-modified/boost/move/detail/meta_utils.hpp +9 -52
  783. data/src/cxx_supportlib/vendor-modified/boost/move/detail/meta_utils_core.hpp +15 -0
  784. data/src/cxx_supportlib/vendor-modified/boost/move/detail/move_helpers.hpp +24 -24
  785. data/src/cxx_supportlib/vendor-modified/boost/move/detail/nsec_clock.hpp +70 -26
  786. data/src/cxx_supportlib/vendor-modified/boost/move/detail/placement_new.hpp +2 -0
  787. data/src/cxx_supportlib/vendor-modified/boost/move/detail/reverse_iterator.hpp +40 -33
  788. data/src/cxx_supportlib/vendor-modified/boost/move/detail/std_ns_begin.hpp +7 -3
  789. data/src/cxx_supportlib/vendor-modified/boost/move/detail/std_ns_end.hpp +5 -0
  790. data/src/cxx_supportlib/vendor-modified/boost/move/detail/to_raw_pointer.hpp +1 -1
  791. data/src/cxx_supportlib/vendor-modified/boost/move/detail/type_traits.hpp +90 -30
  792. data/src/cxx_supportlib/vendor-modified/boost/move/detail/workaround.hpp +90 -3
  793. data/src/cxx_supportlib/vendor-modified/boost/move/iterator.hpp +22 -22
  794. data/src/cxx_supportlib/vendor-modified/boost/move/make_unique.hpp +10 -0
  795. data/src/cxx_supportlib/vendor-modified/boost/move/unique_ptr.hpp +65 -66
  796. data/src/cxx_supportlib/vendor-modified/boost/move/utility.hpp +2 -2
  797. data/src/cxx_supportlib/vendor-modified/boost/move/utility_core.hpp +38 -33
  798. data/src/cxx_supportlib/vendor-modified/boost/mp11/algorithm.hpp +1386 -0
  799. data/src/cxx_supportlib/vendor-modified/boost/mp11/bind.hpp +120 -0
  800. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/config.hpp +149 -0
  801. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_append.hpp +321 -0
  802. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_copy_if.hpp +48 -0
  803. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_count.hpp +147 -0
  804. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_defer.hpp +119 -0
  805. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_fold.hpp +166 -0
  806. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_front.hpp +50 -0
  807. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_is_list.hpp +39 -0
  808. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_is_value_list.hpp +41 -0
  809. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_list.hpp +24 -0
  810. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_list_v.hpp +27 -0
  811. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_map_find.hpp +87 -0
  812. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_min_element.hpp +51 -0
  813. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_plus.hpp +84 -0
  814. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_remove_if.hpp +48 -0
  815. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_rename.hpp +54 -0
  816. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_value.hpp +25 -0
  817. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_void.hpp +32 -0
  818. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_with_index.hpp +385 -0
  819. data/src/cxx_supportlib/vendor-modified/boost/mp11/function.hpp +222 -0
  820. data/src/cxx_supportlib/vendor-modified/boost/mp11/integer_sequence.hpp +121 -0
  821. data/src/cxx_supportlib/vendor-modified/boost/mp11/integral.hpp +51 -0
  822. data/src/cxx_supportlib/vendor-modified/boost/mp11/list.hpp +481 -0
  823. data/src/cxx_supportlib/vendor-modified/boost/mp11/set.hpp +188 -0
  824. data/src/cxx_supportlib/vendor-modified/boost/mp11/utility.hpp +169 -0
  825. data/src/cxx_supportlib/vendor-modified/boost/mp11/version.hpp +16 -0
  826. data/src/cxx_supportlib/vendor-modified/boost/mpl/and.hpp +1 -1
  827. data/src/cxx_supportlib/vendor-modified/boost/mpl/assert.hpp +6 -6
  828. data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/integral_wrapper.hpp +2 -1
  829. data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/preprocessed/gcc/template_arity.hpp +1 -1
  830. data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/template_arity.hpp +1 -1
  831. data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/yes_no.hpp +2 -1
  832. data/src/cxx_supportlib/vendor-modified/boost/mpl/bitand.hpp +1 -1
  833. data/src/cxx_supportlib/vendor-modified/boost/mpl/bitor.hpp +1 -1
  834. data/src/cxx_supportlib/vendor-modified/boost/mpl/or.hpp +1 -1
  835. data/src/cxx_supportlib/vendor-modified/boost/next_prior.hpp +3 -44
  836. data/src/cxx_supportlib/vendor-modified/boost/nondet_random.hpp +22 -0
  837. data/src/cxx_supportlib/vendor-modified/boost/none.hpp +1 -1
  838. data/src/cxx_supportlib/vendor-modified/boost/none_t.hpp +15 -1
  839. data/src/cxx_supportlib/vendor-modified/boost/numeric/conversion/detail/int_float_mixture.hpp +5 -5
  840. data/src/cxx_supportlib/vendor-modified/boost/numeric/conversion/detail/sign_mixture.hpp +5 -5
  841. data/src/cxx_supportlib/vendor-modified/boost/numeric/conversion/detail/udt_builtin_mixture.hpp +5 -5
  842. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/experimental_traits.hpp +4 -49
  843. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_aligned_storage.hpp +3 -4
  844. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_config.hpp +16 -7
  845. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_hash.hpp +49 -0
  846. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_reference_spec.hpp +49 -48
  847. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_relops.hpp +11 -11
  848. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_swap.hpp +9 -9
  849. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_trivially_copyable_base.hpp +31 -260
  850. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_utility.hpp +41 -0
  851. data/src/cxx_supportlib/vendor-modified/boost/optional/optional.hpp +169 -599
  852. data/src/cxx_supportlib/vendor-modified/boost/optional/optional_io.hpp +4 -7
  853. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/pack/tag_keyword_arg_ref.hpp +2 -2
  854. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/pack/unmatched_argument.hpp +1 -1
  855. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/preprocessor/overloads.hpp +1 -1
  856. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/tag.hpp +4 -4
  857. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/unwrap_cv_reference.hpp +1 -1
  858. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/void.hpp +1 -1
  859. data/src/cxx_supportlib/vendor-modified/boost/parameter/binding.hpp +3 -3
  860. data/src/cxx_supportlib/vendor-modified/boost/parameter/match.hpp +1 -1
  861. data/src/cxx_supportlib/vendor-modified/boost/parameter/template_keyword.hpp +1 -1
  862. data/src/cxx_supportlib/vendor-modified/boost/parameter/value_type.hpp +3 -3
  863. data/src/cxx_supportlib/vendor-modified/boost/pointer_cast.hpp +12 -24
  864. data/src/cxx_supportlib/vendor-modified/boost/pool/pool.hpp +22 -9
  865. data/src/cxx_supportlib/vendor-modified/boost/pool/simple_segregated_storage.hpp +13 -0
  866. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/loongarch.h +41 -0
  867. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/sparc.h +2 -2
  868. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture.h +1 -0
  869. data/src/cxx_supportlib/vendor-modified/boost/predef/language/stdc.h +1 -1
  870. data/src/cxx_supportlib/vendor-modified/boost/predef/language/stdcpp.h +2 -2
  871. data/src/cxx_supportlib/vendor-modified/boost/predef/library/std/msvc.h +53 -0
  872. data/src/cxx_supportlib/vendor-modified/boost/predef/library/std.h +1 -0
  873. data/src/cxx_supportlib/vendor-modified/boost/predef/make.h +4 -0
  874. data/src/cxx_supportlib/vendor-modified/boost/predef/os/vms.h +1 -1
  875. data/src/cxx_supportlib/vendor-modified/boost/predef/other/endian.h +1 -0
  876. data/src/cxx_supportlib/vendor-modified/boost/predef/version.h +1 -1
  877. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/variadic/has_opt.hpp +8 -2
  878. data/src/cxx_supportlib/vendor-modified/boost/random/beta_distribution.hpp +5 -5
  879. data/src/cxx_supportlib/vendor-modified/boost/random/hyperexponential_distribution.hpp +15 -15
  880. data/src/cxx_supportlib/vendor-modified/boost/random/inversive_congruential.hpp +1 -1
  881. data/src/cxx_supportlib/vendor-modified/boost/random/splitmix64.hpp +203 -0
  882. data/src/cxx_supportlib/vendor-modified/boost/random/subtract_with_carry.hpp +14 -14
  883. data/src/cxx_supportlib/vendor-modified/boost/random/uniform_real_distribution.hpp +2 -2
  884. data/src/cxx_supportlib/vendor-modified/boost/random.hpp +1 -0
  885. data/src/cxx_supportlib/vendor-modified/boost/ratio/config.hpp +4 -82
  886. data/src/cxx_supportlib/vendor-modified/boost/ratio/detail/gcd_lcm.hpp +53 -0
  887. data/src/cxx_supportlib/vendor-modified/boost/ratio/detail/is_evenly_divisible_by.hpp +32 -0
  888. data/src/cxx_supportlib/vendor-modified/boost/ratio/detail/is_ratio.hpp +28 -0
  889. data/src/cxx_supportlib/vendor-modified/boost/ratio/include.hpp +1 -3
  890. data/src/cxx_supportlib/vendor-modified/boost/ratio/ratio.hpp +5 -249
  891. data/src/cxx_supportlib/vendor-modified/boost/ratio/ratio_fwd.hpp +30 -56
  892. data/src/cxx_supportlib/vendor-modified/boost/ratio/ratio_io.hpp +0 -533
  893. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/basic_regex_parser.hpp +8 -1
  894. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/icu.hpp +1 -1
  895. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/pattern_except.hpp +3 -2
  896. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/perl_matcher_non_recursive.hpp +1 -0
  897. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_workaround.hpp +7 -7
  898. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/basic_regex_creator.hpp +4 -3
  899. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/basic_regex_parser.hpp +23 -13
  900. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/icu.hpp +10 -10
  901. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/mem_block_cache.hpp +2 -0
  902. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/pattern_except.hpp +3 -2
  903. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/perl_matcher_common.hpp +6 -0
  904. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/perl_matcher_non_recursive.hpp +3 -1
  905. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_workaround.hpp +7 -7
  906. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/w32_regex_traits.hpp +235 -104
  907. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/allocate_shared_array.hpp +37 -43
  908. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/bad_weak_ptr.hpp +1 -23
  909. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/atomic_count.hpp +1 -0
  910. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/deprecated_macros.hpp +52 -0
  911. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/local_counted_base.hpp +14 -18
  912. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/local_sp_deleter.hpp +7 -15
  913. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/shared_count.hpp +40 -91
  914. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_convertible.hpp +0 -16
  915. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base.hpp +1 -0
  916. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_cw_ppc.hpp +4 -2
  917. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_gcc_atomic.hpp +1 -1
  918. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_nt.hpp +13 -14
  919. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_std_atomic.hpp +16 -17
  920. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_impl.hpp +17 -56
  921. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_has_gcc_intrinsics.hpp +4 -1
  922. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_noexcept.hpp +5 -14
  923. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_type_traits.hpp +55 -0
  924. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/spinlock.hpp +1 -0
  925. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/spinlock_gcc_atomic.hpp +11 -2
  926. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/spinlock_std_atomic.hpp +5 -6
  927. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/yield_k.hpp +4 -6
  928. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/enable_shared_from_this.hpp +7 -9
  929. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/intrusive_ptr.hpp +32 -119
  930. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/intrusive_ref_counter.hpp +17 -18
  931. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/make_shared.hpp +2 -5
  932. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/make_shared_array.hpp +10 -8
  933. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/make_shared_object.hpp +28 -564
  934. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/make_unique.hpp +64 -0
  935. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/scoped_array.hpp +17 -20
  936. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/scoped_ptr.hpp +20 -21
  937. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/shared_array.hpp +34 -66
  938. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/shared_ptr.hpp +79 -370
  939. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/weak_ptr.hpp +31 -88
  940. data/src/cxx_supportlib/vendor-modified/boost/static_assert.hpp +2 -1
  941. data/src/cxx_supportlib/vendor-modified/boost/system/detail/append_int.hpp +32 -0
  942. data/src/cxx_supportlib/vendor-modified/boost/system/detail/config.hpp +26 -8
  943. data/src/cxx_supportlib/vendor-modified/boost/system/detail/enable_if.hpp +3 -12
  944. data/src/cxx_supportlib/vendor-modified/boost/system/detail/error_category.hpp +38 -50
  945. data/src/cxx_supportlib/vendor-modified/boost/system/detail/error_category_impl.hpp +76 -49
  946. data/src/cxx_supportlib/vendor-modified/boost/system/detail/error_code.hpp +261 -159
  947. data/src/cxx_supportlib/vendor-modified/boost/system/detail/error_condition.hpp +145 -58
  948. data/src/cxx_supportlib/vendor-modified/boost/system/detail/generic_category.hpp +7 -7
  949. data/src/cxx_supportlib/vendor-modified/boost/system/detail/generic_category_message.hpp +17 -5
  950. data/src/cxx_supportlib/vendor-modified/boost/system/detail/interop_category.hpp +7 -7
  951. data/src/cxx_supportlib/vendor-modified/boost/system/detail/is_same.hpp +3 -13
  952. data/src/cxx_supportlib/vendor-modified/boost/system/detail/mutex.hpp +128 -0
  953. data/src/cxx_supportlib/vendor-modified/boost/system/detail/snprintf.hpp +1 -43
  954. data/src/cxx_supportlib/vendor-modified/boost/system/detail/std_category.hpp +20 -77
  955. data/src/cxx_supportlib/vendor-modified/boost/system/detail/std_category_impl.hpp +97 -0
  956. data/src/cxx_supportlib/vendor-modified/boost/system/detail/system_category.hpp +7 -7
  957. data/src/cxx_supportlib/vendor-modified/boost/system/detail/system_category_impl.hpp +8 -20
  958. data/src/cxx_supportlib/vendor-modified/boost/system/detail/system_category_message.hpp +71 -0
  959. data/src/cxx_supportlib/vendor-modified/boost/system/errc.hpp +9 -2
  960. data/src/cxx_supportlib/vendor-modified/boost/system/system_error.hpp +30 -59
  961. data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/deque.hpp +1 -24
  962. data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/functional.hpp +1 -14
  963. data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/list.hpp +1 -14
  964. data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/memory/allocator_arg.hpp +2 -12
  965. data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/memory/allocator_traits.hpp +0 -11
  966. data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/memory/config.hpp +0 -2
  967. data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/memory/default_delete.hpp +0 -16
  968. data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/memory/pointer_traits.hpp +0 -11
  969. data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/memory/scoped_allocator.hpp +0 -11
  970. data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/memory/shared_ptr.hpp +0 -19
  971. data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/memory/unique_ptr.hpp +4 -6
  972. data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/queue.hpp +2 -26
  973. data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/tuple.hpp +1 -18
  974. data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/vector.hpp +1 -14
  975. data/src/cxx_supportlib/vendor-modified/boost/thread/detail/invoke.hpp +11 -4
  976. data/src/cxx_supportlib/vendor-modified/boost/thread/detail/string_to_unsigned.hpp +55 -0
  977. data/src/cxx_supportlib/vendor-modified/boost/thread/detail/string_trim.hpp +29 -0
  978. data/src/cxx_supportlib/vendor-modified/boost/thread/externally_locked.hpp +5 -5
  979. data/src/cxx_supportlib/vendor-modified/boost/thread/future.hpp +0 -1
  980. data/src/cxx_supportlib/vendor-modified/boost/thread/futures/wait_for_any.hpp +3 -2
  981. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/thread_data.hpp +1 -1
  982. data/src/cxx_supportlib/vendor-modified/boost/thread/scoped_thread.hpp +9 -0
  983. data/src/cxx_supportlib/vendor-modified/boost/thread/synchronized_value.hpp +4 -4
  984. data/src/cxx_supportlib/vendor-modified/boost/thread/thread_guard.hpp +5 -0
  985. data/src/cxx_supportlib/vendor-modified/boost/throw_exception.hpp +104 -6
  986. data/src/cxx_supportlib/vendor-modified/boost/token_functions.hpp +2 -2
  987. data/src/cxx_supportlib/vendor-modified/boost/tuple/detail/tuple_basic.hpp +25 -24
  988. data/src/cxx_supportlib/vendor-modified/boost/tuple/tuple.hpp +1 -1
  989. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/config.hpp +4 -1
  990. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/is_function_ptr_helper.hpp +27 -27
  991. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/is_mem_fun_pointer_impl.hpp +27 -27
  992. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/is_swappable_cxx_11.hpp +70 -0
  993. data/src/cxx_supportlib/vendor-modified/boost/type_traits/intrinsics.hpp +22 -8
  994. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_complete.hpp +2 -1
  995. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_floating_point.hpp +22 -0
  996. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_function.hpp +1 -1
  997. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_integral.hpp +3 -0
  998. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_member_function_pointer.hpp +1 -1
  999. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_nothrow_swappable.hpp +4 -24
  1000. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_swappable.hpp +92 -0
  1001. data/src/cxx_supportlib/vendor-modified/boost/typeof/decltype.hpp +2 -3
  1002. data/src/cxx_supportlib/vendor-modified/boost/typeof/incr_registration_group.hpp +1 -10
  1003. data/src/cxx_supportlib/vendor-modified/boost/typeof/msvc/typeof_impl.hpp +5 -6
  1004. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/bitset.hpp +2 -4
  1005. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/complex.hpp +2 -4
  1006. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/deque.hpp +2 -5
  1007. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/fstream.hpp +2 -15
  1008. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/functional.hpp +4 -51
  1009. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/iostream.hpp +2 -6
  1010. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/istream.hpp +2 -9
  1011. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/iterator.hpp +2 -46
  1012. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/list.hpp +2 -5
  1013. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/locale.hpp +2 -29
  1014. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/map.hpp +2 -9
  1015. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/memory.hpp +4 -9
  1016. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/ostream.hpp +2 -6
  1017. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/queue.hpp +2 -5
  1018. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/set.hpp +2 -9
  1019. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/sstream.hpp +2 -19
  1020. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/stack.hpp +2 -5
  1021. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/streambuf.hpp +2 -5
  1022. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/string.hpp +2 -12
  1023. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/utility.hpp +2 -4
  1024. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/valarray.hpp +2 -10
  1025. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/vector.hpp +2 -5
  1026. data/src/cxx_supportlib/vendor-modified/boost/typeof/typeof.hpp +8 -202
  1027. data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_flat_map.hpp +1055 -0
  1028. data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_flat_map_fwd.hpp +66 -0
  1029. data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_flat_set.hpp +917 -0
  1030. data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_flat_set_fwd.hpp +67 -0
  1031. data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_node_map.hpp +1202 -0
  1032. data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_node_map_fwd.hpp +67 -0
  1033. data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_node_set.hpp +1065 -0
  1034. data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_node_set_fwd.hpp +67 -0
  1035. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/allocator_constructed.hpp +59 -0
  1036. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/archive_constructed.hpp +71 -0
  1037. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/bad_archive_exception.hpp +27 -0
  1038. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/concurrent_static_asserts.hpp +127 -0
  1039. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/fca.hpp +900 -0
  1040. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/concurrent_table.hpp +1993 -0
  1041. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/core.hpp +2404 -0
  1042. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/cumulative_stats.hpp +177 -0
  1043. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/element_type.hpp +64 -0
  1044. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/flat_map_types.hpp +94 -0
  1045. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/flat_set_types.hpp +50 -0
  1046. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/ignore_wshadow.hpp +35 -0
  1047. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/node_handle.hpp +319 -0
  1048. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/node_map_handle.hpp +56 -0
  1049. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/node_map_types.hpp +150 -0
  1050. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/node_set_handle.hpp +48 -0
  1051. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/node_set_types.hpp +101 -0
  1052. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/reentrancy_check.hpp +138 -0
  1053. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/restore_wshadow.hpp +11 -0
  1054. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/rw_spinlock.hpp +179 -0
  1055. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/table.hpp +661 -0
  1056. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/tuple_rotate_right.hpp +53 -0
  1057. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/types_constructibility.hpp +172 -0
  1058. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/implementation.hpp +1463 -3502
  1059. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/map.hpp +10 -31
  1060. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/mulx.hpp +129 -0
  1061. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/narrow_cast.hpp +44 -0
  1062. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/opt_storage.hpp +30 -0
  1063. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/prime_fmod.hpp +214 -0
  1064. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/serialization_version.hpp +74 -0
  1065. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/serialize_container.hpp +204 -0
  1066. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/serialize_fca_container.hpp +156 -0
  1067. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/serialize_tracked_address.hpp +104 -0
  1068. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/set.hpp +8 -30
  1069. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/static_assert.hpp +16 -0
  1070. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/throw_exception.hpp +30 -0
  1071. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/type_traits.hpp +237 -0
  1072. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/xmx.hpp +75 -0
  1073. data/src/cxx_supportlib/vendor-modified/boost/unordered/hash_traits.hpp +70 -0
  1074. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_map.hpp +821 -0
  1075. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_map_fwd.hpp +59 -0
  1076. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_set.hpp +631 -0
  1077. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_set_fwd.hpp +58 -0
  1078. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_map.hpp +760 -994
  1079. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_map_fwd.hpp +35 -13
  1080. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_node_map.hpp +895 -0
  1081. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_node_map_fwd.hpp +59 -0
  1082. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_node_set.hpp +707 -0
  1083. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_node_set_fwd.hpp +58 -0
  1084. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_printers.hpp +414 -0
  1085. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_set.hpp +539 -664
  1086. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_set_fwd.hpp +35 -15
  1087. data/src/cxx_supportlib/vendor-modified/boost/utility/base_from_member.hpp +2 -1
  1088. data/src/cxx_supportlib/vendor-modified/boost/utility/binary.hpp +3 -2
  1089. data/src/cxx_supportlib/vendor-modified/boost/utility/detail/minstd_rand.hpp +1 -43
  1090. data/src/cxx_supportlib/vendor-modified/boost/utility/in_place_factory.hpp +6 -0
  1091. data/src/cxx_supportlib/vendor-modified/boost/utility/result_of.hpp +13 -2
  1092. data/src/cxx_supportlib/vendor-modified/boost/utility/string_ref.hpp +6 -2
  1093. data/src/cxx_supportlib/vendor-modified/boost/utility/string_view.hpp +24 -3
  1094. data/src/cxx_supportlib/vendor-modified/boost/utility/swap.hpp +4 -1
  1095. data/src/cxx_supportlib/vendor-modified/boost/utility/typed_in_place_factory.hpp +6 -1
  1096. data/src/cxx_supportlib/vendor-modified/boost/utility/value_init.hpp +12 -8
  1097. data/src/cxx_supportlib/vendor-modified/boost/version.hpp +2 -2
  1098. data/src/cxx_supportlib/vendor-modified/jsoncpp/jsoncpp.cpp +2 -9
  1099. data/src/cxx_supportlib/vendor-modified/modp_b64_strict_aliasing.cpp +3 -3
  1100. data/src/helper-scripts/backtrace-sanitizer.rb +2 -2
  1101. data/src/helper-scripts/crash-watch.rb +1 -1
  1102. data/src/helper-scripts/download_binaries/extconf.rb +2 -2
  1103. data/src/helper-scripts/meteor-loader.rb +9 -4
  1104. data/src/helper-scripts/node-loader.js +2 -2
  1105. data/src/helper-scripts/prespawn +2 -2
  1106. data/src/helper-scripts/rack-loader.rb +2 -2
  1107. data/src/helper-scripts/rack-preloader.rb +2 -2
  1108. data/src/helper-scripts/wsgi-loader.py +36 -19
  1109. data/src/nginx_module/ConfigGeneral/AutoGeneratedDefinitions.c +26 -34
  1110. data/src/nginx_module/ConfigGeneral/AutoGeneratedDefinitions.c.cxxcodebuilder +2 -2
  1111. data/src/nginx_module/ConfigGeneral/AutoGeneratedManifestDefaultsInitialization.c +14 -2
  1112. data/src/nginx_module/ConfigGeneral/AutoGeneratedManifestDefaultsInitialization.c.cxxcodebuilder +2 -2
  1113. data/src/nginx_module/ConfigGeneral/AutoGeneratedSetterFuncs.c +38 -50
  1114. data/src/nginx_module/ConfigGeneral/AutoGeneratedSetterFuncs.c.cxxcodebuilder +2 -2
  1115. data/src/nginx_module/ConfigGeneral/ManifestGeneration.c +2 -2
  1116. data/src/nginx_module/Configuration.c +8 -3
  1117. data/src/nginx_module/Configuration.h +1 -1
  1118. data/src/nginx_module/ContentHandler.c +1 -1
  1119. data/src/nginx_module/ContentHandler.h +1 -1
  1120. data/src/nginx_module/LocationConfig/AutoGeneratedCreateFunction.c +13 -2
  1121. data/src/nginx_module/LocationConfig/AutoGeneratedCreateFunction.c.cxxcodebuilder +2 -2
  1122. data/src/nginx_module/LocationConfig/AutoGeneratedHeaderSerialization.c +38 -2
  1123. data/src/nginx_module/LocationConfig/AutoGeneratedHeaderSerialization.c.cxxcodebuilder +2 -2
  1124. data/src/nginx_module/LocationConfig/AutoGeneratedManifestGeneration.c +29 -2
  1125. data/src/nginx_module/LocationConfig/AutoGeneratedManifestGeneration.c.cxxcodebuilder +2 -2
  1126. data/src/nginx_module/LocationConfig/AutoGeneratedMergeFunction.c +8 -2
  1127. data/src/nginx_module/LocationConfig/AutoGeneratedMergeFunction.c.cxxcodebuilder +2 -2
  1128. data/src/nginx_module/LocationConfig/AutoGeneratedStruct.h +10 -2
  1129. data/src/nginx_module/LocationConfig/AutoGeneratedStruct.h.cxxcodebuilder +2 -2
  1130. data/src/nginx_module/MainConfig/AutoGeneratedCreateFunction.c +7 -26
  1131. data/src/nginx_module/MainConfig/AutoGeneratedCreateFunction.c.cxxcodebuilder +2 -2
  1132. data/src/nginx_module/MainConfig/AutoGeneratedManifestGeneration.c +13 -50
  1133. data/src/nginx_module/MainConfig/AutoGeneratedManifestGeneration.c.cxxcodebuilder +2 -2
  1134. data/src/nginx_module/MainConfig/AutoGeneratedStruct.h +6 -18
  1135. data/src/nginx_module/MainConfig/AutoGeneratedStruct.h.cxxcodebuilder +2 -2
  1136. data/src/nginx_module/StaticContentHandler.c +1 -1
  1137. data/src/nginx_module/StaticContentHandler.h +1 -1
  1138. data/src/nginx_module/ngx_http_passenger_module.c +2 -6
  1139. data/src/nginx_module/ngx_http_passenger_module.h +1 -1
  1140. data/src/nodejs_supportlib/phusion_passenger/line_reader.js +2 -2
  1141. data/src/ruby_native_extension/extconf.rb +3 -3
  1142. data/src/ruby_native_extension/passenger_native_support.c +22 -5
  1143. data/src/ruby_supportlib/phusion_passenger/abstract_installer.rb +2 -2
  1144. data/src/ruby_supportlib/phusion_passenger/admin_tools/instance.rb +2 -2
  1145. data/src/ruby_supportlib/phusion_passenger/admin_tools/instance_registry.rb +2 -2
  1146. data/src/ruby_supportlib/phusion_passenger/admin_tools/memory_stats.rb +2 -2
  1147. data/src/ruby_supportlib/phusion_passenger/admin_tools.rb +2 -2
  1148. data/src/ruby_supportlib/phusion_passenger/apache2/config_options.rb +22 -26
  1149. data/src/ruby_supportlib/phusion_passenger/apache2/config_utils.rb +2 -2
  1150. data/src/ruby_supportlib/phusion_passenger/common_library.rb +18 -10
  1151. data/src/ruby_supportlib/phusion_passenger/config/about_command.rb +2 -2
  1152. data/src/ruby_supportlib/phusion_passenger/config/agent_compiler.rb +2 -2
  1153. data/src/ruby_supportlib/phusion_passenger/config/api_call_command.rb +2 -2
  1154. data/src/ruby_supportlib/phusion_passenger/config/build_native_support_command.rb +2 -2
  1155. data/src/ruby_supportlib/phusion_passenger/config/command.rb +2 -2
  1156. data/src/ruby_supportlib/phusion_passenger/config/compile_agent_command.rb +2 -2
  1157. data/src/ruby_supportlib/phusion_passenger/config/compile_nginx_engine_command.rb +8 -4
  1158. data/src/ruby_supportlib/phusion_passenger/config/detach_process_command.rb +2 -2
  1159. data/src/ruby_supportlib/phusion_passenger/config/download_agent_command.rb +2 -2
  1160. data/src/ruby_supportlib/phusion_passenger/config/download_nginx_engine_command.rb +2 -2
  1161. data/src/ruby_supportlib/phusion_passenger/config/install_agent_command.rb +2 -2
  1162. data/src/ruby_supportlib/phusion_passenger/config/install_standalone_runtime_command.rb +12 -2
  1163. data/src/ruby_supportlib/phusion_passenger/config/installation_utils.rb +2 -2
  1164. data/src/ruby_supportlib/phusion_passenger/config/list_instances_command.rb +2 -2
  1165. data/src/ruby_supportlib/phusion_passenger/config/main.rb +2 -2
  1166. data/src/ruby_supportlib/phusion_passenger/config/nginx_engine_compiler.rb +15 -7
  1167. data/src/ruby_supportlib/phusion_passenger/config/reopen_logs_command.rb +2 -2
  1168. data/src/ruby_supportlib/phusion_passenger/config/restart_app_command.rb +2 -2
  1169. data/src/ruby_supportlib/phusion_passenger/config/system_metrics_command.rb +2 -2
  1170. data/src/ruby_supportlib/phusion_passenger/config/system_properties_command.rb +2 -2
  1171. data/src/ruby_supportlib/phusion_passenger/config/utils.rb +2 -2
  1172. data/src/ruby_supportlib/phusion_passenger/config/validate_install_command.rb +2 -2
  1173. data/src/ruby_supportlib/phusion_passenger/console_text_template.rb +2 -2
  1174. data/src/ruby_supportlib/phusion_passenger/constants.rb +3 -2
  1175. data/src/ruby_supportlib/phusion_passenger/debug_logging.rb +2 -2
  1176. data/src/ruby_supportlib/phusion_passenger/loader_shared_helpers.rb +15 -5
  1177. data/src/ruby_supportlib/phusion_passenger/message_channel.rb +2 -2
  1178. data/src/ruby_supportlib/phusion_passenger/message_client.rb +2 -2
  1179. data/src/ruby_supportlib/phusion_passenger/native_support.rb +12 -7
  1180. data/src/ruby_supportlib/phusion_passenger/nginx/config_options.rb +21 -30
  1181. data/src/ruby_supportlib/phusion_passenger/packaging.rb +3 -2
  1182. data/src/ruby_supportlib/phusion_passenger/platform_info/apache.rb +11 -12
  1183. data/src/ruby_supportlib/phusion_passenger/platform_info/apache_detector.rb +2 -2
  1184. data/src/ruby_supportlib/phusion_passenger/platform_info/binary_compatibility.rb +3 -3
  1185. data/src/ruby_supportlib/phusion_passenger/platform_info/compiler.rb +56 -14
  1186. data/src/ruby_supportlib/phusion_passenger/platform_info/crypto.rb +2 -2
  1187. data/src/ruby_supportlib/phusion_passenger/platform_info/curl.rb +2 -2
  1188. data/src/ruby_supportlib/phusion_passenger/platform_info/cxx_portability.rb +9 -31
  1189. data/src/ruby_supportlib/phusion_passenger/platform_info/depcheck_specs/gems.rb +10 -0
  1190. data/src/ruby_supportlib/phusion_passenger/platform_info/depcheck_specs/libs.rb +6 -6
  1191. data/src/ruby_supportlib/phusion_passenger/platform_info/linux.rb +2 -2
  1192. data/src/ruby_supportlib/phusion_passenger/platform_info/networking.rb +2 -2
  1193. data/src/ruby_supportlib/phusion_passenger/platform_info/openssl.rb +2 -2
  1194. data/src/ruby_supportlib/phusion_passenger/platform_info/operating_system.rb +7 -37
  1195. data/src/ruby_supportlib/phusion_passenger/platform_info/pcre.rb +13 -14
  1196. data/src/ruby_supportlib/phusion_passenger/platform_info/ruby.rb +4 -4
  1197. data/src/ruby_supportlib/phusion_passenger/platform_info/zlib.rb +2 -2
  1198. data/src/ruby_supportlib/phusion_passenger/platform_info.rb +2 -2
  1199. data/src/ruby_supportlib/phusion_passenger/plugin.rb +2 -2
  1200. data/src/ruby_supportlib/phusion_passenger/preloader_shared_helpers.rb +14 -8
  1201. data/src/ruby_supportlib/phusion_passenger/public_api.rb +5 -2
  1202. data/src/ruby_supportlib/phusion_passenger/rack/handler.rb +73 -0
  1203. data/src/ruby_supportlib/phusion_passenger/rack/out_of_band_gc.rb +2 -2
  1204. data/src/ruby_supportlib/phusion_passenger/rack/thread_handler_extension.rb +14 -3
  1205. data/src/ruby_supportlib/phusion_passenger/rack_handler.rb +32 -58
  1206. data/src/ruby_supportlib/phusion_passenger/request_handler/thread_handler.rb +2 -2
  1207. data/src/ruby_supportlib/phusion_passenger/request_handler.rb +2 -2
  1208. data/src/ruby_supportlib/phusion_passenger/ruby_core_enhancements.rb +7 -2
  1209. data/src/ruby_supportlib/phusion_passenger/ruby_core_io_enhancements.rb +2 -2
  1210. data/src/ruby_supportlib/phusion_passenger/simple_benchmarking.rb +2 -2
  1211. data/src/ruby_supportlib/phusion_passenger/standalone/app_finder.rb +2 -2
  1212. data/src/ruby_supportlib/phusion_passenger/standalone/command.rb +2 -2
  1213. data/src/ruby_supportlib/phusion_passenger/standalone/config_options_list.rb +27 -23
  1214. data/src/ruby_supportlib/phusion_passenger/standalone/config_utils.rb +2 -2
  1215. data/src/ruby_supportlib/phusion_passenger/standalone/control_utils.rb +2 -2
  1216. data/src/ruby_supportlib/phusion_passenger/standalone/main.rb +2 -2
  1217. data/src/ruby_supportlib/phusion_passenger/standalone/start_command/builtin_engine.rb +6 -3
  1218. data/src/ruby_supportlib/phusion_passenger/standalone/start_command/nginx_engine.rb +3 -3
  1219. data/src/ruby_supportlib/phusion_passenger/standalone/start_command.rb +2 -6
  1220. data/src/ruby_supportlib/phusion_passenger/standalone/status_command.rb +3 -4
  1221. data/src/ruby_supportlib/phusion_passenger/standalone/stop_command.rb +9 -3
  1222. data/src/ruby_supportlib/phusion_passenger/standalone/version_command.rb +2 -2
  1223. data/src/ruby_supportlib/phusion_passenger/utils/ansi_colors.rb +2 -2
  1224. data/src/ruby_supportlib/phusion_passenger/utils/download.rb +2 -2
  1225. data/src/ruby_supportlib/phusion_passenger/utils/file_system_watcher.rb +2 -2
  1226. data/src/ruby_supportlib/phusion_passenger/utils/hosts_file_parser.rb +2 -2
  1227. data/src/ruby_supportlib/phusion_passenger/utils/json.rb +7 -198
  1228. data/src/ruby_supportlib/phusion_passenger/utils/lock.rb +2 -2
  1229. data/src/ruby_supportlib/phusion_passenger/utils/native_support_utils.rb +2 -2
  1230. data/src/ruby_supportlib/phusion_passenger/utils/progress_bar.rb +2 -2
  1231. data/src/ruby_supportlib/phusion_passenger/utils/strscan.rb +67 -0
  1232. data/src/ruby_supportlib/phusion_passenger/utils/terminal_choice_menu.rb +2 -2
  1233. data/src/ruby_supportlib/phusion_passenger/utils/unseekable_socket.rb +2 -2
  1234. data/src/ruby_supportlib/phusion_passenger/utils.rb +8 -17
  1235. data/src/ruby_supportlib/phusion_passenger/vendor/crash_watch/app.rb +2 -2
  1236. data/src/ruby_supportlib/phusion_passenger/vendor/crash_watch/base.rb +1 -1
  1237. data/src/ruby_supportlib/phusion_passenger/vendor/crash_watch/gdb_controller.rb +5 -1
  1238. data/src/ruby_supportlib/phusion_passenger/vendor/crash_watch/lldb_controller.rb +6 -2
  1239. data/src/ruby_supportlib/phusion_passenger/vendor/crash_watch/utils.rb +1 -1
  1240. data/src/ruby_supportlib/phusion_passenger/vendor/crash_watch/version.rb +1 -1
  1241. data/src/ruby_supportlib/phusion_passenger/vendor/daemon_controller/lock_file.rb +1 -1
  1242. data/src/ruby_supportlib/phusion_passenger/vendor/daemon_controller/spawn.rb +1 -1
  1243. data/src/ruby_supportlib/phusion_passenger/vendor/daemon_controller/version.rb +1 -1
  1244. data/src/ruby_supportlib/phusion_passenger/vendor/daemon_controller.rb +1 -1
  1245. data/src/ruby_supportlib/phusion_passenger.rb +11 -11
  1246. data/src/schema_printer/SchemaPrinterMain.cpp +2 -6
  1247. data/src/schema_printer/SchemaPrinterMain.cpp.cxxcodebuilder +2 -2
  1248. metadata +211 -741
  1249. data/dev/webpacketpp.patch +0 -39
  1250. data/src/agent/Core/AdminPanelConnector.h +0 -681
  1251. data/src/cxx_supportlib/DataStructures/HashMap.h +0 -60
  1252. data/src/cxx_supportlib/FileTools/LargeFiles.cpp +0 -41
  1253. data/src/cxx_supportlib/ServerKit/http_parser.cpp +0 -2265
  1254. data/src/cxx_supportlib/ServerKit/http_parser.h +0 -330
  1255. data/src/cxx_supportlib/WebSocketCommandReverseServer.h +0 -975
  1256. data/src/cxx_supportlib/vendor-modified/boost/align/align.hpp +0 -19
  1257. data/src/cxx_supportlib/vendor-modified/boost/align/alignment_of.hpp +0 -54
  1258. data/src/cxx_supportlib/vendor-modified/boost/align/alignment_of_forward.hpp +0 -20
  1259. data/src/cxx_supportlib/vendor-modified/boost/align/detail/align_cxx11.hpp +0 -21
  1260. data/src/cxx_supportlib/vendor-modified/boost/align/detail/aligned_alloc.hpp +0 -52
  1261. data/src/cxx_supportlib/vendor-modified/boost/align/detail/alignment_of.hpp +0 -31
  1262. data/src/cxx_supportlib/vendor-modified/boost/align/detail/alignment_of_cxx11.hpp +0 -23
  1263. data/src/cxx_supportlib/vendor-modified/boost/align/detail/element_type.hpp +0 -91
  1264. data/src/cxx_supportlib/vendor-modified/boost/align/detail/integral_constant.hpp +0 -53
  1265. data/src/cxx_supportlib/vendor-modified/boost/align/detail/min_size.hpp +0 -26
  1266. data/src/cxx_supportlib/vendor-modified/boost/array.hpp +0 -456
  1267. data/src/cxx_supportlib/vendor-modified/boost/asio/any_io_executor.hpp +0 -302
  1268. data/src/cxx_supportlib/vendor-modified/boost/asio/associated_allocator.hpp +0 -179
  1269. data/src/cxx_supportlib/vendor-modified/boost/asio/associated_cancellation_slot.hpp +0 -179
  1270. data/src/cxx_supportlib/vendor-modified/boost/asio/associated_executor.hpp +0 -224
  1271. data/src/cxx_supportlib/vendor-modified/boost/asio/associator.hpp +0 -37
  1272. data/src/cxx_supportlib/vendor-modified/boost/asio/async_result.hpp +0 -1267
  1273. data/src/cxx_supportlib/vendor-modified/boost/asio/awaitable.hpp +0 -135
  1274. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_datagram_socket.hpp +0 -1305
  1275. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_deadline_timer.hpp +0 -705
  1276. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_io_object.hpp +0 -292
  1277. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_raw_socket.hpp +0 -1296
  1278. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_seq_packet_socket.hpp +0 -800
  1279. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_serial_port.hpp +0 -909
  1280. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_signal_set.hpp +0 -578
  1281. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_socket.hpp +0 -1917
  1282. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_socket_acceptor.hpp +0 -2600
  1283. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_socket_iostream.hpp +0 -409
  1284. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_socket_streambuf.hpp +0 -689
  1285. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_stream_socket.hpp +0 -1122
  1286. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_streambuf.hpp +0 -454
  1287. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_streambuf_fwd.hpp +0 -38
  1288. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_waitable_timer.hpp +0 -823
  1289. data/src/cxx_supportlib/vendor-modified/boost/asio/bind_cancellation_slot.hpp +0 -723
  1290. data/src/cxx_supportlib/vendor-modified/boost/asio/bind_executor.hpp +0 -756
  1291. data/src/cxx_supportlib/vendor-modified/boost/asio/buffer.hpp +0 -2500
  1292. data/src/cxx_supportlib/vendor-modified/boost/asio/buffered_read_stream.hpp +0 -255
  1293. data/src/cxx_supportlib/vendor-modified/boost/asio/buffered_read_stream_fwd.hpp +0 -27
  1294. data/src/cxx_supportlib/vendor-modified/boost/asio/buffered_stream.hpp +0 -281
  1295. data/src/cxx_supportlib/vendor-modified/boost/asio/buffered_stream_fwd.hpp +0 -27
  1296. data/src/cxx_supportlib/vendor-modified/boost/asio/buffered_write_stream.hpp +0 -247
  1297. data/src/cxx_supportlib/vendor-modified/boost/asio/buffered_write_stream_fwd.hpp +0 -27
  1298. data/src/cxx_supportlib/vendor-modified/boost/asio/buffers_iterator.hpp +0 -523
  1299. data/src/cxx_supportlib/vendor-modified/boost/asio/cancellation_signal.hpp +0 -361
  1300. data/src/cxx_supportlib/vendor-modified/boost/asio/cancellation_state.hpp +0 -237
  1301. data/src/cxx_supportlib/vendor-modified/boost/asio/cancellation_type.hpp +0 -176
  1302. data/src/cxx_supportlib/vendor-modified/boost/asio/co_spawn.hpp +0 -501
  1303. data/src/cxx_supportlib/vendor-modified/boost/asio/completion_condition.hpp +0 -220
  1304. data/src/cxx_supportlib/vendor-modified/boost/asio/compose.hpp +0 -138
  1305. data/src/cxx_supportlib/vendor-modified/boost/asio/connect.hpp +0 -1138
  1306. data/src/cxx_supportlib/vendor-modified/boost/asio/coroutine.hpp +0 -330
  1307. data/src/cxx_supportlib/vendor-modified/boost/asio/deadline_timer.hpp +0 -40
  1308. data/src/cxx_supportlib/vendor-modified/boost/asio/defer.hpp +0 -132
  1309. data/src/cxx_supportlib/vendor-modified/boost/asio/detached.hpp +0 -114
  1310. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/array.hpp +0 -40
  1311. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/array_fwd.hpp +0 -34
  1312. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/assert.hpp +0 -32
  1313. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/atomic_count.hpp +0 -66
  1314. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/base_from_cancellation_state.hpp +0 -165
  1315. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/base_from_completion_cond.hpp +0 -71
  1316. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/bind_handler.hpp +0 -1073
  1317. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/blocking_executor_op.hpp +0 -109
  1318. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/buffer_resize_guard.hpp +0 -68
  1319. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/buffer_sequence_adapter.hpp +0 -652
  1320. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/buffered_stream_storage.hpp +0 -128
  1321. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/bulk_executor_op.hpp +0 -90
  1322. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/call_stack.hpp +0 -127
  1323. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/chrono.hpp +0 -68
  1324. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/chrono_time_traits.hpp +0 -192
  1325. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/completion_handler.hpp +0 -90
  1326. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/concurrency_hint.hpp +0 -94
  1327. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/conditionally_enabled_event.hpp +0 -122
  1328. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/conditionally_enabled_mutex.hpp +0 -151
  1329. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/config.hpp +0 -1938
  1330. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/consuming_buffers.hpp +0 -416
  1331. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/cstddef.hpp +0 -33
  1332. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/cstdint.hpp +0 -62
  1333. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/date_time_fwd.hpp +0 -34
  1334. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/deadline_timer_service.hpp +0 -337
  1335. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/dependent_type.hpp +0 -38
  1336. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/descriptor_ops.hpp +0 -141
  1337. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/descriptor_read_op.hpp +0 -150
  1338. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/descriptor_write_op.hpp +0 -150
  1339. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/dev_poll_reactor.hpp +0 -224
  1340. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/epoll_reactor.hpp +0 -278
  1341. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/event.hpp +0 -50
  1342. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/eventfd_select_interrupter.hpp +0 -85
  1343. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/executor_function.hpp +0 -206
  1344. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/executor_op.hpp +0 -86
  1345. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/fd_set_adapter.hpp +0 -41
  1346. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/fenced_block.hpp +0 -82
  1347. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/functional.hpp +0 -46
  1348. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/future.hpp +0 -33
  1349. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/gcc_arm_fenced_block.hpp +0 -93
  1350. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/gcc_hppa_fenced_block.hpp +0 -70
  1351. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/gcc_sync_fenced_block.hpp +0 -67
  1352. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/gcc_x86_fenced_block.hpp +0 -101
  1353. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/global.hpp +0 -54
  1354. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_alloc_helpers.hpp +0 -290
  1355. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_cont_helpers.hpp +0 -45
  1356. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_invoke_helpers.hpp +0 -80
  1357. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_tracking.hpp +0 -268
  1358. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_type_requirements.hpp +0 -561
  1359. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_work.hpp +0 -527
  1360. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/hash_map.hpp +0 -333
  1361. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/buffer_sequence_adapter.ipp +0 -120
  1362. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/descriptor_ops.ipp +0 -610
  1363. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/dev_poll_reactor.hpp +0 -101
  1364. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/dev_poll_reactor.ipp +0 -462
  1365. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/epoll_reactor.hpp +0 -111
  1366. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/epoll_reactor.ipp +0 -819
  1367. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/eventfd_select_interrupter.ipp +0 -173
  1368. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/handler_tracking.ipp +0 -398
  1369. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/kqueue_reactor.hpp +0 -115
  1370. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/kqueue_reactor.ipp +0 -601
  1371. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/null_event.ipp +0 -76
  1372. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/pipe_select_interrupter.ipp +0 -131
  1373. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/posix_event.ipp +0 -65
  1374. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/posix_mutex.ipp +0 -48
  1375. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/posix_thread.ipp +0 -86
  1376. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/posix_tss_ptr.ipp +0 -48
  1377. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/reactive_descriptor_service.ipp +0 -225
  1378. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/reactive_serial_port_service.ipp +0 -151
  1379. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/reactive_socket_service_base.ipp +0 -302
  1380. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/resolver_service_base.ipp +0 -160
  1381. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/scheduler.ipp +0 -661
  1382. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/select_reactor.hpp +0 -126
  1383. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/select_reactor.ipp +0 -359
  1384. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/service_registry.hpp +0 -96
  1385. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/service_registry.ipp +0 -199
  1386. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/signal_set_service.ipp +0 -670
  1387. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/socket_ops.ipp +0 -3966
  1388. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/socket_select_interrupter.ipp +0 -187
  1389. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/strand_executor_service.hpp +0 -356
  1390. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/strand_executor_service.ipp +0 -160
  1391. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/strand_service.hpp +0 -89
  1392. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/strand_service.ipp +0 -204
  1393. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/thread_context.ipp +0 -37
  1394. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/throw_error.ipp +0 -47
  1395. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/timer_queue_ptime.ipp +0 -99
  1396. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/timer_queue_set.ipp +0 -103
  1397. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_control.hpp +0 -86
  1398. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_object_impl.hpp +0 -174
  1399. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/is_buffer_sequence.hpp +0 -314
  1400. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/is_executor.hpp +0 -128
  1401. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/keyword_tss_ptr.hpp +0 -72
  1402. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/kqueue_reactor.hpp +0 -254
  1403. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/limits.hpp +0 -26
  1404. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/local_free_on_block_exit.hpp +0 -61
  1405. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/macos_fenced_block.hpp +0 -64
  1406. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/memory.hpp +0 -135
  1407. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/mutex.hpp +0 -50
  1408. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/non_const_lvalue.hpp +0 -56
  1409. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/noncopyable.hpp +0 -45
  1410. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_event.hpp +0 -108
  1411. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_fenced_block.hpp +0 -49
  1412. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_global.hpp +0 -61
  1413. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_mutex.hpp +0 -66
  1414. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_reactor.hpp +0 -70
  1415. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_signal_blocker.hpp +0 -71
  1416. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_socket_service.hpp +0 -521
  1417. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_static_mutex.hpp +0 -62
  1418. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_thread.hpp +0 -69
  1419. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_tss_ptr.hpp +0 -70
  1420. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/object_pool.hpp +0 -173
  1421. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/old_win_sdk_compat.hpp +0 -216
  1422. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/op_queue.hpp +0 -164
  1423. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/operation.hpp +0 -40
  1424. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/pipe_select_interrupter.hpp +0 -91
  1425. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/pop_options.hpp +0 -149
  1426. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_event.hpp +0 -177
  1427. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_fd_set_adapter.hpp +0 -120
  1428. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_global.hpp +0 -82
  1429. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_mutex.hpp +0 -78
  1430. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_signal_blocker.hpp +0 -87
  1431. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_static_mutex.hpp +0 -66
  1432. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_thread.hpp +0 -111
  1433. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_tss_ptr.hpp +0 -81
  1434. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/push_options.hpp +0 -218
  1435. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_descriptor_service.hpp +0 -511
  1436. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_null_buffers_op.hpp +0 -100
  1437. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_serial_port_service.hpp +0 -239
  1438. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_accept_op.hpp +0 -244
  1439. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_connect_op.hpp +0 -125
  1440. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_recv_op.hpp +0 -161
  1441. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_recvfrom_op.hpp +0 -166
  1442. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_recvmsg_op.hpp +0 -147
  1443. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_send_op.hpp +0 -164
  1444. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_sendto_op.hpp +0 -158
  1445. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_service.hpp +0 -607
  1446. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_service_base.hpp +0 -654
  1447. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_wait_op.hpp +0 -100
  1448. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactor.hpp +0 -32
  1449. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactor_fwd.hpp +0 -42
  1450. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactor_op.hpp +0 -73
  1451. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactor_op_queue.hpp +0 -214
  1452. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/recycling_allocator.hpp +0 -107
  1453. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/regex_fwd.hpp +0 -44
  1454. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/resolve_endpoint_op.hpp +0 -142
  1455. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/resolve_op.hpp +0 -47
  1456. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/resolve_query_op.hpp +0 -152
  1457. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/resolver_service.hpp +0 -147
  1458. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/resolver_service_base.hpp +0 -160
  1459. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/scheduler.hpp +0 -231
  1460. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/scheduler_operation.hpp +0 -80
  1461. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/scheduler_thread_info.hpp +0 -42
  1462. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/scoped_lock.hpp +0 -103
  1463. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/scoped_ptr.hpp +0 -89
  1464. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/select_interrupter.hpp +0 -48
  1465. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/select_reactor.hpp +0 -250
  1466. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/service_registry.hpp +0 -166
  1467. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/signal_blocker.hpp +0 -46
  1468. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/signal_handler.hpp +0 -92
  1469. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/signal_init.hpp +0 -49
  1470. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/signal_op.hpp +0 -51
  1471. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/signal_set_service.hpp +0 -231
  1472. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/socket_holder.hpp +0 -100
  1473. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/socket_ops.hpp +0 -385
  1474. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/socket_option.hpp +0 -318
  1475. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/socket_select_interrupter.hpp +0 -93
  1476. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/socket_types.hpp +0 -419
  1477. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/solaris_fenced_block.hpp +0 -64
  1478. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/source_location.hpp +0 -47
  1479. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/static_mutex.hpp +0 -54
  1480. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/std_event.hpp +0 -190
  1481. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/std_fenced_block.hpp +0 -64
  1482. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/std_global.hpp +0 -72
  1483. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/std_mutex.hpp +0 -75
  1484. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/std_static_mutex.hpp +0 -83
  1485. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/std_thread.hpp +0 -73
  1486. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/strand_executor_service.hpp +0 -175
  1487. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/strand_service.hpp +0 -146
  1488. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/string_view.hpp +0 -49
  1489. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/thread.hpp +0 -62
  1490. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/thread_context.hpp +0 -53
  1491. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/thread_group.hpp +0 -101
  1492. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/thread_info_base.hpp +0 -258
  1493. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/throw_error.hpp +0 -55
  1494. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/throw_exception.hpp +0 -53
  1495. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/timer_queue.hpp +0 -391
  1496. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/timer_queue_base.hpp +0 -70
  1497. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/timer_queue_ptime.hpp +0 -105
  1498. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/timer_queue_set.hpp +0 -68
  1499. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/timer_scheduler.hpp +0 -35
  1500. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/timer_scheduler_fwd.hpp +0 -42
  1501. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/tss_ptr.hpp +0 -71
  1502. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/type_traits.hpp +0 -158
  1503. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/variadic_templates.hpp +0 -294
  1504. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/wait_handler.hpp +0 -92
  1505. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/wait_op.hpp +0 -51
  1506. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/winsock_init.hpp +0 -130
  1507. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/work_dispatcher.hpp +0 -153
  1508. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/wrapped_handler.hpp +0 -329
  1509. data/src/cxx_supportlib/vendor-modified/boost/asio/dispatch.hpp +0 -123
  1510. data/src/cxx_supportlib/vendor-modified/boost/asio/error.hpp +0 -361
  1511. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/allocator.hpp +0 -339
  1512. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/any_executor.hpp +0 -2348
  1513. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/bad_executor.hpp +0 -49
  1514. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/blocking.hpp +0 -1553
  1515. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/blocking_adaptation.hpp +0 -1214
  1516. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/bulk_execute.hpp +0 -401
  1517. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/bulk_guarantee.hpp +0 -1217
  1518. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/connect.hpp +0 -493
  1519. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/context.hpp +0 -235
  1520. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/context_as.hpp +0 -223
  1521. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/detail/as_invocable.hpp +0 -154
  1522. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/detail/as_operation.hpp +0 -107
  1523. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/detail/as_receiver.hpp +0 -130
  1524. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/detail/bulk_sender.hpp +0 -263
  1525. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/detail/submit_receiver.hpp +0 -235
  1526. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/detail/void_receiver.hpp +0 -92
  1527. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/execute.hpp +0 -289
  1528. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/executor.hpp +0 -254
  1529. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/impl/bad_executor.ipp +0 -42
  1530. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/impl/receiver_invocation_error.ipp +0 -38
  1531. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/invocable_archetype.hpp +0 -73
  1532. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/mapping.hpp +0 -1118
  1533. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/occupancy.hpp +0 -228
  1534. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/operation_state.hpp +0 -96
  1535. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/outstanding_work.hpp +0 -869
  1536. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/prefer_only.hpp +0 -333
  1537. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/receiver.hpp +0 -282
  1538. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/receiver_invocation_error.hpp +0 -50
  1539. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/relationship.hpp +0 -867
  1540. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/schedule.hpp +0 -291
  1541. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/scheduler.hpp +0 -88
  1542. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/sender.hpp +0 -313
  1543. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/set_done.hpp +0 -254
  1544. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/set_error.hpp +0 -254
  1545. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/set_value.hpp +0 -487
  1546. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/start.hpp +0 -251
  1547. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/submit.hpp +0 -454
  1548. data/src/cxx_supportlib/vendor-modified/boost/asio/execution.hpp +0 -48
  1549. data/src/cxx_supportlib/vendor-modified/boost/asio/execution_context.hpp +0 -414
  1550. data/src/cxx_supportlib/vendor-modified/boost/asio/executor.hpp +0 -349
  1551. data/src/cxx_supportlib/vendor-modified/boost/asio/executor_work_guard.hpp +0 -304
  1552. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/append.hpp +0 -73
  1553. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/as_single.hpp +0 -137
  1554. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/as_tuple.hpp +0 -133
  1555. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/awaitable_operators.hpp +0 -538
  1556. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/cancellation_condition.hpp +0 -157
  1557. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/coro.hpp +0 -1057
  1558. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/deferred.hpp +0 -607
  1559. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/completion_handler_erasure.hpp +0 -160
  1560. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/coro_promise_allocator.hpp +0 -120
  1561. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/coro_traits.hpp +0 -185
  1562. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/partial_promise.hpp +0 -181
  1563. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/append.hpp +0 -219
  1564. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/as_single.hpp +0 -231
  1565. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/as_tuple.hpp +0 -248
  1566. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/deferred.hpp +0 -106
  1567. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/parallel_group.hpp +0 -434
  1568. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/prepend.hpp +0 -219
  1569. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/promise.hpp +0 -100
  1570. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/parallel_group.hpp +0 -217
  1571. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/prepend.hpp +0 -73
  1572. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/promise.hpp +0 -608
  1573. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/use_coro.hpp +0 -284
  1574. data/src/cxx_supportlib/vendor-modified/boost/asio/generic/basic_endpoint.hpp +0 -195
  1575. data/src/cxx_supportlib/vendor-modified/boost/asio/generic/datagram_protocol.hpp +0 -125
  1576. data/src/cxx_supportlib/vendor-modified/boost/asio/generic/detail/endpoint.hpp +0 -135
  1577. data/src/cxx_supportlib/vendor-modified/boost/asio/generic/detail/impl/endpoint.ipp +0 -112
  1578. data/src/cxx_supportlib/vendor-modified/boost/asio/generic/raw_protocol.hpp +0 -123
  1579. data/src/cxx_supportlib/vendor-modified/boost/asio/generic/seq_packet_protocol.hpp +0 -124
  1580. data/src/cxx_supportlib/vendor-modified/boost/asio/generic/stream_protocol.hpp +0 -129
  1581. data/src/cxx_supportlib/vendor-modified/boost/asio/handler_alloc_hook.hpp +0 -106
  1582. data/src/cxx_supportlib/vendor-modified/boost/asio/handler_continuation_hook.hpp +0 -56
  1583. data/src/cxx_supportlib/vendor-modified/boost/asio/handler_invoke_hook.hpp +0 -113
  1584. data/src/cxx_supportlib/vendor-modified/boost/asio/high_resolution_timer.hpp +0 -46
  1585. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/awaitable.hpp +0 -762
  1586. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/buffered_read_stream.hpp +0 -500
  1587. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/buffered_write_stream.hpp +0 -480
  1588. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/co_spawn.hpp +0 -348
  1589. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/compose.hpp +0 -689
  1590. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/connect.hpp +0 -906
  1591. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/defer.hpp +0 -258
  1592. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/detached.hpp +0 -132
  1593. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/dispatch.hpp +0 -253
  1594. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/error.ipp +0 -130
  1595. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/execution_context.hpp +0 -111
  1596. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/execution_context.ipp +0 -84
  1597. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/executor.hpp +0 -302
  1598. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/executor.ipp +0 -45
  1599. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/handler_alloc_hook.ipp +0 -64
  1600. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/io_context.hpp +0 -446
  1601. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/io_context.ipp +0 -177
  1602. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/multiple_exceptions.ipp +0 -51
  1603. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/post.hpp +0 -258
  1604. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/read.hpp +0 -1201
  1605. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/read_at.hpp +0 -735
  1606. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/read_until.hpp +0 -3317
  1607. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/redirect_error.hpp +0 -611
  1608. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/serial_port_base.hpp +0 -61
  1609. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/serial_port_base.ipp +0 -556
  1610. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/spawn.hpp +0 -519
  1611. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/src.hpp +0 -85
  1612. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/system_context.hpp +0 -36
  1613. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/system_context.ipp +0 -94
  1614. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/system_executor.hpp +0 -187
  1615. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/thread_pool.hpp +0 -356
  1616. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/thread_pool.ipp +0 -143
  1617. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/use_awaitable.hpp +0 -293
  1618. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/use_future.hpp +0 -1030
  1619. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/write.hpp +0 -1102
  1620. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/write_at.hpp +0 -646
  1621. data/src/cxx_supportlib/vendor-modified/boost/asio/io_context.hpp +0 -1552
  1622. data/src/cxx_supportlib/vendor-modified/boost/asio/io_context_strand.hpp +0 -378
  1623. data/src/cxx_supportlib/vendor-modified/boost/asio/io_service.hpp +0 -35
  1624. data/src/cxx_supportlib/vendor-modified/boost/asio/io_service_strand.hpp +0 -20
  1625. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/address.hpp +0 -292
  1626. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/address_v4.hpp +0 -357
  1627. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/address_v4_iterator.hpp +0 -164
  1628. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/address_v4_range.hpp +0 -136
  1629. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/address_v6.hpp +0 -384
  1630. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/address_v6_iterator.hpp +0 -185
  1631. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/address_v6_range.hpp +0 -131
  1632. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/bad_address_cast.hpp +0 -55
  1633. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/basic_endpoint.hpp +0 -293
  1634. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/basic_resolver.hpp +0 -1078
  1635. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/basic_resolver_entry.hpp +0 -115
  1636. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/basic_resolver_iterator.hpp +0 -194
  1637. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/basic_resolver_query.hpp +0 -246
  1638. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/basic_resolver_results.hpp +0 -313
  1639. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/detail/endpoint.hpp +0 -143
  1640. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/detail/impl/endpoint.ipp +0 -201
  1641. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/detail/socket_option.hpp +0 -568
  1642. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/host_name.hpp +0 -44
  1643. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/icmp.hpp +0 -117
  1644. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/address.hpp +0 -69
  1645. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/address.ipp +0 -241
  1646. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/address_v4.hpp +0 -69
  1647. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/address_v4.ipp +0 -212
  1648. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/address_v6.hpp +0 -69
  1649. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/address_v6.ipp +0 -352
  1650. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/basic_endpoint.hpp +0 -45
  1651. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/host_name.ipp +0 -56
  1652. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/network_v4.hpp +0 -56
  1653. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/network_v4.ipp +0 -218
  1654. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/network_v6.hpp +0 -55
  1655. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/network_v6.ipp +0 -187
  1656. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/multicast.hpp +0 -193
  1657. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/network_v4.hpp +0 -263
  1658. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/network_v6.hpp +0 -237
  1659. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/resolver_base.hpp +0 -131
  1660. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/resolver_query_base.hpp +0 -45
  1661. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/tcp.hpp +0 -157
  1662. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/udp.hpp +0 -113
  1663. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/unicast.hpp +0 -72
  1664. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/v6_only.hpp +0 -71
  1665. data/src/cxx_supportlib/vendor-modified/boost/asio/is_applicable_property.hpp +0 -63
  1666. data/src/cxx_supportlib/vendor-modified/boost/asio/is_executor.hpp +0 -48
  1667. data/src/cxx_supportlib/vendor-modified/boost/asio/is_read_buffered.hpp +0 -61
  1668. data/src/cxx_supportlib/vendor-modified/boost/asio/is_write_buffered.hpp +0 -61
  1669. data/src/cxx_supportlib/vendor-modified/boost/asio/local/basic_endpoint.hpp +0 -249
  1670. data/src/cxx_supportlib/vendor-modified/boost/asio/local/connect_pair.hpp +0 -103
  1671. data/src/cxx_supportlib/vendor-modified/boost/asio/local/datagram_protocol.hpp +0 -82
  1672. data/src/cxx_supportlib/vendor-modified/boost/asio/local/detail/endpoint.hpp +0 -141
  1673. data/src/cxx_supportlib/vendor-modified/boost/asio/local/detail/impl/endpoint.ipp +0 -133
  1674. data/src/cxx_supportlib/vendor-modified/boost/asio/local/stream_protocol.hpp +0 -92
  1675. data/src/cxx_supportlib/vendor-modified/boost/asio/multiple_exceptions.hpp +0 -60
  1676. data/src/cxx_supportlib/vendor-modified/boost/asio/packaged_task.hpp +0 -128
  1677. data/src/cxx_supportlib/vendor-modified/boost/asio/placeholders.hpp +0 -153
  1678. data/src/cxx_supportlib/vendor-modified/boost/asio/posix/basic_descriptor.hpp +0 -710
  1679. data/src/cxx_supportlib/vendor-modified/boost/asio/posix/basic_stream_descriptor.hpp +0 -503
  1680. data/src/cxx_supportlib/vendor-modified/boost/asio/posix/descriptor.hpp +0 -39
  1681. data/src/cxx_supportlib/vendor-modified/boost/asio/posix/descriptor_base.hpp +0 -92
  1682. data/src/cxx_supportlib/vendor-modified/boost/asio/posix/stream_descriptor.hpp +0 -39
  1683. data/src/cxx_supportlib/vendor-modified/boost/asio/post.hpp +0 -128
  1684. data/src/cxx_supportlib/vendor-modified/boost/asio/prefer.hpp +0 -738
  1685. data/src/cxx_supportlib/vendor-modified/boost/asio/query.hpp +0 -328
  1686. data/src/cxx_supportlib/vendor-modified/boost/asio/read.hpp +0 -1390
  1687. data/src/cxx_supportlib/vendor-modified/boost/asio/read_at.hpp +0 -740
  1688. data/src/cxx_supportlib/vendor-modified/boost/asio/read_until.hpp +0 -3033
  1689. data/src/cxx_supportlib/vendor-modified/boost/asio/redirect_error.hpp +0 -68
  1690. data/src/cxx_supportlib/vendor-modified/boost/asio/require.hpp +0 -575
  1691. data/src/cxx_supportlib/vendor-modified/boost/asio/require_concept.hpp +0 -356
  1692. data/src/cxx_supportlib/vendor-modified/boost/asio/serial_port.hpp +0 -38
  1693. data/src/cxx_supportlib/vendor-modified/boost/asio/serial_port_base.hpp +0 -169
  1694. data/src/cxx_supportlib/vendor-modified/boost/asio/signal_set.hpp +0 -30
  1695. data/src/cxx_supportlib/vendor-modified/boost/asio/socket_base.hpp +0 -561
  1696. data/src/cxx_supportlib/vendor-modified/boost/asio/spawn.hpp +0 -346
  1697. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/context.hpp +0 -763
  1698. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/context_base.hpp +0 -211
  1699. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/buffered_handshake_op.hpp +0 -121
  1700. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/engine.hpp +0 -172
  1701. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/handshake_op.hpp +0 -69
  1702. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/impl/engine.ipp +0 -365
  1703. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/impl/openssl_init.ipp +0 -167
  1704. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/io.hpp +0 -427
  1705. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/openssl_init.hpp +0 -103
  1706. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/openssl_types.hpp +0 -34
  1707. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/password_callback.hpp +0 -68
  1708. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/read_op.hpp +0 -74
  1709. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/shutdown_op.hpp +0 -71
  1710. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/stream_core.hpp +0 -208
  1711. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/verify_callback.hpp +0 -64
  1712. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/write_op.hpp +0 -78
  1713. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/error.hpp +0 -129
  1714. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/host_name_verification.hpp +0 -92
  1715. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/impl/context.hpp +0 -69
  1716. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/impl/context.ipp +0 -1247
  1717. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/impl/error.ipp +0 -104
  1718. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/impl/host_name_verification.ipp +0 -75
  1719. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/impl/rfc2818_verification.ipp +0 -166
  1720. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/impl/src.hpp +0 -29
  1721. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/rfc2818_verification.hpp +0 -100
  1722. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/stream.hpp +0 -974
  1723. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/stream_base.hpp +0 -54
  1724. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/verify_context.hpp +0 -69
  1725. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/verify_mode.hpp +0 -65
  1726. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl.hpp +0 -28
  1727. data/src/cxx_supportlib/vendor-modified/boost/asio/static_thread_pool.hpp +0 -33
  1728. data/src/cxx_supportlib/vendor-modified/boost/asio/steady_timer.hpp +0 -44
  1729. data/src/cxx_supportlib/vendor-modified/boost/asio/strand.hpp +0 -571
  1730. data/src/cxx_supportlib/vendor-modified/boost/asio/streambuf.hpp +0 -35
  1731. data/src/cxx_supportlib/vendor-modified/boost/asio/system_context.hpp +0 -92
  1732. data/src/cxx_supportlib/vendor-modified/boost/asio/system_executor.hpp +0 -686
  1733. data/src/cxx_supportlib/vendor-modified/boost/asio/system_timer.hpp +0 -44
  1734. data/src/cxx_supportlib/vendor-modified/boost/asio/this_coro.hpp +0 -282
  1735. data/src/cxx_supportlib/vendor-modified/boost/asio/thread_pool.hpp +0 -1133
  1736. data/src/cxx_supportlib/vendor-modified/boost/asio/time_traits.hpp +0 -88
  1737. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/bulk_execute_free.hpp +0 -116
  1738. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/bulk_execute_member.hpp +0 -116
  1739. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/connect_free.hpp +0 -114
  1740. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/connect_member.hpp +0 -114
  1741. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/equality_comparable.hpp +0 -106
  1742. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/execute_free.hpp +0 -110
  1743. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/execute_member.hpp +0 -110
  1744. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/prefer_free.hpp +0 -110
  1745. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/prefer_member.hpp +0 -110
  1746. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/query_free.hpp +0 -110
  1747. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/query_member.hpp +0 -110
  1748. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/query_static_constexpr_member.hpp +0 -110
  1749. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/require_concept_free.hpp +0 -110
  1750. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/require_concept_member.hpp +0 -110
  1751. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/require_free.hpp +0 -110
  1752. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/require_member.hpp +0 -110
  1753. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/schedule_free.hpp +0 -110
  1754. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/schedule_member.hpp +0 -110
  1755. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/set_done_free.hpp +0 -110
  1756. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/set_done_member.hpp +0 -110
  1757. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/set_error_free.hpp +0 -114
  1758. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/set_error_member.hpp +0 -114
  1759. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/set_value_free.hpp +0 -236
  1760. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/set_value_member.hpp +0 -236
  1761. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/start_free.hpp +0 -110
  1762. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/start_member.hpp +0 -110
  1763. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/static_query.hpp +0 -110
  1764. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/static_require.hpp +0 -125
  1765. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/static_require_concept.hpp +0 -126
  1766. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/submit_free.hpp +0 -114
  1767. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/submit_member.hpp +0 -114
  1768. data/src/cxx_supportlib/vendor-modified/boost/asio/ts/buffer.hpp +0 -24
  1769. data/src/cxx_supportlib/vendor-modified/boost/asio/ts/executor.hpp +0 -35
  1770. data/src/cxx_supportlib/vendor-modified/boost/asio/ts/internet.hpp +0 -40
  1771. data/src/cxx_supportlib/vendor-modified/boost/asio/ts/io_context.hpp +0 -20
  1772. data/src/cxx_supportlib/vendor-modified/boost/asio/ts/net.hpp +0 -26
  1773. data/src/cxx_supportlib/vendor-modified/boost/asio/ts/netfwd.hpp +0 -256
  1774. data/src/cxx_supportlib/vendor-modified/boost/asio/ts/socket.hpp +0 -27
  1775. data/src/cxx_supportlib/vendor-modified/boost/asio/ts/timer.hpp +0 -26
  1776. data/src/cxx_supportlib/vendor-modified/boost/asio/unyield.hpp +0 -21
  1777. data/src/cxx_supportlib/vendor-modified/boost/asio/use_awaitable.hpp +0 -168
  1778. data/src/cxx_supportlib/vendor-modified/boost/asio/use_future.hpp +0 -162
  1779. data/src/cxx_supportlib/vendor-modified/boost/asio/uses_executor.hpp +0 -73
  1780. data/src/cxx_supportlib/vendor-modified/boost/asio/version.hpp +0 -23
  1781. data/src/cxx_supportlib/vendor-modified/boost/asio/wait_traits.hpp +0 -58
  1782. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/basic_object_handle.hpp +0 -437
  1783. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/basic_overlapped_handle.hpp +0 -363
  1784. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/basic_random_access_handle.hpp +0 -512
  1785. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/basic_stream_handle.hpp +0 -496
  1786. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/object_handle.hpp +0 -40
  1787. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/overlapped_handle.hpp +0 -41
  1788. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/overlapped_ptr.hpp +0 -147
  1789. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/random_access_handle.hpp +0 -39
  1790. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/stream_handle.hpp +0 -39
  1791. data/src/cxx_supportlib/vendor-modified/boost/asio/write.hpp +0 -1348
  1792. data/src/cxx_supportlib/vendor-modified/boost/asio/write_at.hpp +0 -748
  1793. data/src/cxx_supportlib/vendor-modified/boost/asio/yield.hpp +0 -23
  1794. data/src/cxx_supportlib/vendor-modified/boost/asio.hpp +0 -187
  1795. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_ops_windows.hpp +0 -201
  1796. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_ops_windows.hpp +0 -67
  1797. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_caps_windows.hpp +0 -55
  1798. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_ops_windows.hpp +0 -150
  1799. data/src/cxx_supportlib/vendor-modified/boost/bind/bind_mf2_cc.hpp +0 -228
  1800. data/src/cxx_supportlib/vendor-modified/boost/bind/bind_mf_cc.hpp +0 -441
  1801. data/src/cxx_supportlib/vendor-modified/boost/bind/bind_template.hpp +0 -345
  1802. data/src/cxx_supportlib/vendor-modified/boost/bind/mem_fn_cc.hpp +0 -103
  1803. data/src/cxx_supportlib/vendor-modified/boost/bind/mem_fn_template.hpp +0 -1047
  1804. data/src/cxx_supportlib/vendor-modified/boost/bind/mem_fn_vw.hpp +0 -130
  1805. data/src/cxx_supportlib/vendor-modified/boost/bind/storage.hpp +0 -475
  1806. data/src/cxx_supportlib/vendor-modified/boost/checked_delete.hpp +0 -17
  1807. data/src/cxx_supportlib/vendor-modified/boost/config/platform/cygwin.hpp +0 -71
  1808. data/src/cxx_supportlib/vendor-modified/boost/container_hash/detail/float_functions.hpp +0 -336
  1809. data/src/cxx_supportlib/vendor-modified/boost/container_hash/detail/hash_float.hpp +0 -271
  1810. data/src/cxx_supportlib/vendor-modified/boost/container_hash/detail/limits.hpp +0 -62
  1811. data/src/cxx_supportlib/vendor-modified/boost/container_hash/extensions.hpp +0 -361
  1812. data/src/cxx_supportlib/vendor-modified/boost/detail/atomic_count.hpp +0 -21
  1813. data/src/cxx_supportlib/vendor-modified/boost/detail/container_fwd.hpp +0 -157
  1814. data/src/cxx_supportlib/vendor-modified/boost/function/detail/function_iterate.hpp +0 -16
  1815. data/src/cxx_supportlib/vendor-modified/boost/function/detail/gen_maybe_include.pl +0 -39
  1816. data/src/cxx_supportlib/vendor-modified/boost/function/detail/maybe_include.hpp +0 -369
  1817. data/src/cxx_supportlib/vendor-modified/boost/function/detail/prologue.hpp +0 -26
  1818. data/src/cxx_supportlib/vendor-modified/boost/function/gen_function_N.pl +0 -26
  1819. data/src/cxx_supportlib/vendor-modified/boost/functional/hash_fwd.hpp +0 -6
  1820. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/old_optional_implementation.hpp +0 -1058
  1821. data/src/cxx_supportlib/vendor-modified/boost/pointer_to_other.hpp +0 -55
  1822. data/src/cxx_supportlib/vendor-modified/boost/ratio/detail/mpl/abs.hpp +0 -89
  1823. data/src/cxx_supportlib/vendor-modified/boost/ratio/detail/mpl/gcd.hpp +0 -124
  1824. data/src/cxx_supportlib/vendor-modified/boost/ratio/detail/mpl/lcm.hpp +0 -126
  1825. data/src/cxx_supportlib/vendor-modified/boost/ratio/detail/mpl/sign.hpp +0 -89
  1826. data/src/cxx_supportlib/vendor-modified/boost/ratio/detail/overflow_helpers.hpp +0 -367
  1827. data/src/cxx_supportlib/vendor-modified/boost/ratio/detail/ratio_io.hpp +0 -1342
  1828. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/abs.hpp +0 -30
  1829. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/arithmetic.hpp +0 -22
  1830. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/comparison.hpp +0 -19
  1831. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/divides.hpp +0 -30
  1832. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/equal_to.hpp +0 -30
  1833. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/gcd.hpp +0 -30
  1834. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/greater.hpp +0 -30
  1835. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/greater_equal.hpp +0 -30
  1836. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/lcm.hpp +0 -30
  1837. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/less.hpp +0 -30
  1838. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/less_equal.hpp +0 -30
  1839. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/minus.hpp +0 -30
  1840. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/negate.hpp +0 -30
  1841. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/not_equal_to.hpp +0 -30
  1842. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/numeric_cast.hpp +0 -31
  1843. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/plus.hpp +0 -30
  1844. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/rational_c_tag.hpp +0 -25
  1845. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/rational_constant.hpp +0 -15
  1846. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/sign.hpp +0 -30
  1847. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/times.hpp +0 -30
  1848. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/indexed_bit_flag.hpp +0 -54
  1849. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/operator_bool.hpp +0 -64
  1850. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_forward.hpp +0 -52
  1851. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_nullptr_t.hpp +0 -45
  1852. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_obsolete.hpp +0 -32
  1853. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_thread_pause.hpp +0 -51
  1854. data/src/cxx_supportlib/vendor-modified/boost/swap.hpp +0 -17
  1855. data/src/cxx_supportlib/vendor-modified/boost/type_index/stl_type_index.hpp +0 -278
  1856. data/src/cxx_supportlib/vendor-modified/boost/type_index/type_index_facade.hpp +0 -297
  1857. data/src/cxx_supportlib/vendor-modified/boost/type_index.hpp +0 -265
  1858. data/src/cxx_supportlib/vendor-modified/boost/typeof/dmc/typeof_impl.hpp +0 -100
  1859. data/src/cxx_supportlib/vendor-modified/boost/typeof/encode_decode.hpp +0 -58
  1860. data/src/cxx_supportlib/vendor-modified/boost/typeof/encode_decode_params.hpp +0 -34
  1861. data/src/cxx_supportlib/vendor-modified/boost/typeof/int_encoding.hpp +0 -118
  1862. data/src/cxx_supportlib/vendor-modified/boost/typeof/integral_template_param.hpp +0 -80
  1863. data/src/cxx_supportlib/vendor-modified/boost/typeof/message.hpp +0 -8
  1864. data/src/cxx_supportlib/vendor-modified/boost/typeof/modifiers.hpp +0 -121
  1865. data/src/cxx_supportlib/vendor-modified/boost/typeof/native.hpp +0 -60
  1866. data/src/cxx_supportlib/vendor-modified/boost/typeof/pointers_data_members.hpp +0 -38
  1867. data/src/cxx_supportlib/vendor-modified/boost/typeof/register_functions.hpp +0 -50
  1868. data/src/cxx_supportlib/vendor-modified/boost/typeof/register_functions_iterate.hpp +0 -135
  1869. data/src/cxx_supportlib/vendor-modified/boost/typeof/register_fundamental.hpp +0 -61
  1870. data/src/cxx_supportlib/vendor-modified/boost/typeof/register_mem_functions.hpp +0 -32
  1871. data/src/cxx_supportlib/vendor-modified/boost/typeof/template_encoding.hpp +0 -160
  1872. data/src/cxx_supportlib/vendor-modified/boost/typeof/template_template_param.hpp +0 -149
  1873. data/src/cxx_supportlib/vendor-modified/boost/typeof/type_encoding.hpp +0 -27
  1874. data/src/cxx_supportlib/vendor-modified/boost/typeof/type_template_param.hpp +0 -37
  1875. data/src/cxx_supportlib/vendor-modified/boost/typeof/typeof_impl.hpp +0 -187
  1876. data/src/cxx_supportlib/vendor-modified/boost/typeof/unsupported.hpp +0 -29
  1877. data/src/cxx_supportlib/vendor-modified/boost/typeof/vector.hpp +0 -166
  1878. data/src/cxx_supportlib/vendor-modified/boost/typeof/vector100.hpp +0 -321
  1879. data/src/cxx_supportlib/vendor-modified/boost/typeof/vector150.hpp +0 -471
  1880. data/src/cxx_supportlib/vendor-modified/boost/typeof/vector200.hpp +0 -621
  1881. data/src/cxx_supportlib/vendor-modified/boost/typeof/vector50.hpp +0 -171
  1882. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/fwd.hpp +0 -63
  1883. data/src/cxx_supportlib/vendor-modified/websocketpp/COPYING +0 -145
  1884. data/src/cxx_supportlib/vendor-modified/websocketpp/changelog.md +0 -444
  1885. data/src/cxx_supportlib/vendor-modified/websocketpp/readme.md +0 -49
  1886. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/base64/base64.hpp +0 -178
  1887. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/client.hpp +0 -33
  1888. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/close.hpp +0 -353
  1889. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/common/asio.hpp +0 -141
  1890. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/common/asio_ssl.hpp +0 -39
  1891. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/common/chrono.hpp +0 -68
  1892. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/common/connection_hdl.hpp +0 -52
  1893. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/common/cpp11.hpp +0 -162
  1894. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/common/functional.hpp +0 -100
  1895. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/common/md5.hpp +0 -448
  1896. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/common/memory.hpp +0 -88
  1897. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/common/network.hpp +0 -106
  1898. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/common/platforms.hpp +0 -46
  1899. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/common/random.hpp +0 -82
  1900. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/common/regex.hpp +0 -59
  1901. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/common/stdint.hpp +0 -73
  1902. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/common/system_error.hpp +0 -84
  1903. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/common/thread.hpp +0 -88
  1904. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/common/time.hpp +0 -56
  1905. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/common/type_traits.hpp +0 -65
  1906. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/concurrency/basic.hpp +0 -46
  1907. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/concurrency/none.hpp +0 -80
  1908. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/config/asio.hpp +0 -77
  1909. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/config/asio_client.hpp +0 -77
  1910. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/config/asio_no_tls.hpp +0 -73
  1911. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/config/asio_no_tls_client.hpp +0 -73
  1912. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/config/boost_config.hpp +0 -72
  1913. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/config/core.hpp +0 -297
  1914. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/config/core_client.hpp +0 -294
  1915. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/config/debug.hpp +0 -286
  1916. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/config/debug_asio.hpp +0 -77
  1917. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/config/debug_asio_no_tls.hpp +0 -73
  1918. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/config/minimal_client.hpp +0 -72
  1919. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/config/minimal_server.hpp +0 -312
  1920. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/connection.hpp +0 -1642
  1921. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/connection_base.hpp +0 -38
  1922. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/endpoint.hpp +0 -700
  1923. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/endpoint_base.hpp +0 -38
  1924. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/error.hpp +0 -277
  1925. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/extensions/extension.hpp +0 -102
  1926. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/extensions/permessage_deflate/disabled.hpp +0 -129
  1927. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/extensions/permessage_deflate/enabled.hpp +0 -817
  1928. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/frame.hpp +0 -864
  1929. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/http/constants.hpp +0 -308
  1930. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/http/impl/parser.hpp +0 -200
  1931. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/http/impl/request.hpp +0 -191
  1932. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/http/impl/response.hpp +0 -266
  1933. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/http/parser.hpp +0 -629
  1934. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/http/request.hpp +0 -124
  1935. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/http/response.hpp +0 -188
  1936. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/impl/connection_impl.hpp +0 -2375
  1937. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/impl/endpoint_impl.hpp +0 -269
  1938. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/impl/utilities_impl.hpp +0 -87
  1939. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/logger/basic.hpp +0 -199
  1940. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/logger/levels.hpp +0 -203
  1941. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/logger/stub.hpp +0 -119
  1942. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/logger/syslog.hpp +0 -146
  1943. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/message_buffer/alloc.hpp +0 -105
  1944. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/message_buffer/message.hpp +0 -340
  1945. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/message_buffer/pool.hpp +0 -229
  1946. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/processors/base.hpp +0 -299
  1947. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/processors/hybi00.hpp +0 -462
  1948. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/processors/hybi07.hpp +0 -78
  1949. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/processors/hybi08.hpp +0 -83
  1950. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/processors/hybi13.hpp +0 -1078
  1951. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/processors/processor.hpp +0 -407
  1952. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/random/none.hpp +0 -60
  1953. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/random/random_device.hpp +0 -80
  1954. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/roles/client_endpoint.hpp +0 -173
  1955. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/roles/server_endpoint.hpp +0 -195
  1956. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/server.hpp +0 -33
  1957. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/sha1/sha1.hpp +0 -189
  1958. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/transport/asio/base.hpp +0 -232
  1959. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/transport/asio/connection.hpp +0 -1197
  1960. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/transport/asio/endpoint.hpp +0 -1182
  1961. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/transport/asio/security/base.hpp +0 -159
  1962. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/transport/asio/security/none.hpp +0 -372
  1963. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/transport/asio/security/tls.hpp +0 -474
  1964. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/transport/base/connection.hpp +0 -238
  1965. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/transport/base/endpoint.hpp +0 -77
  1966. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/transport/debug/base.hpp +0 -104
  1967. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/transport/debug/connection.hpp +0 -412
  1968. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/transport/debug/endpoint.hpp +0 -140
  1969. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/transport/iostream/base.hpp +0 -133
  1970. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/transport/iostream/connection.hpp +0 -714
  1971. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/transport/iostream/endpoint.hpp +0 -222
  1972. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/transport/stub/base.hpp +0 -95
  1973. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/transport/stub/connection.hpp +0 -286
  1974. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/transport/stub/endpoint.hpp +0 -140
  1975. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/uri.hpp +0 -356
  1976. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/utf8_validator.hpp +0 -154
  1977. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/utilities.hpp +0 -180
  1978. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/version.hpp +0 -61
@@ -1,3966 +0,0 @@
1
- //
2
- // detail/impl/socket_ops.ipp
3
- // ~~~~~~~~~~~~~~~~~~~~~~~~~~
4
- //
5
- // Copyright (c) 2003-2021 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 BOOST_ASIO_DETAIL_SOCKET_OPS_IPP
12
- #define BOOST_ASIO_DETAIL_SOCKET_OPS_IPP
13
-
14
- #if defined(_MSC_VER) && (_MSC_VER >= 1200)
15
- # pragma once
16
- #endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
17
-
18
- #include <boost/asio/detail/config.hpp>
19
-
20
- #include <cctype>
21
- #include <cstdio>
22
- #include <cstdlib>
23
- #include <cstring>
24
- #include <cerrno>
25
- #include <new>
26
- #include <boost/asio/detail/assert.hpp>
27
- #include <boost/asio/detail/socket_ops.hpp>
28
- #include <boost/asio/error.hpp>
29
-
30
- #if defined(BOOST_ASIO_WINDOWS_RUNTIME)
31
- # include <codecvt>
32
- # include <locale>
33
- # include <string>
34
- #endif // defined(BOOST_ASIO_WINDOWS_RUNTIME)
35
-
36
- #if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__) \
37
- || defined(__MACH__) && defined(__APPLE__)
38
- # if defined(BOOST_ASIO_HAS_PTHREADS)
39
- # include <pthread.h>
40
- # endif // defined(BOOST_ASIO_HAS_PTHREADS)
41
- #endif // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
42
- // || defined(__MACH__) && defined(__APPLE__)
43
-
44
- #include <boost/asio/detail/push_options.hpp>
45
-
46
- namespace boost {
47
- namespace asio {
48
- namespace detail {
49
- namespace socket_ops {
50
-
51
- #if !defined(BOOST_ASIO_WINDOWS_RUNTIME)
52
-
53
- #if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
54
- struct msghdr { int msg_namelen; };
55
- #endif // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
56
-
57
- #if defined(__hpux)
58
- // HP-UX doesn't declare these functions extern "C", so they are declared again
59
- // here to avoid linker errors about undefined symbols.
60
- extern "C" char* if_indextoname(unsigned int, char*);
61
- extern "C" unsigned int if_nametoindex(const char*);
62
- #endif // defined(__hpux)
63
-
64
- #endif // !defined(BOOST_ASIO_WINDOWS_RUNTIME)
65
-
66
- inline void clear_last_error()
67
- {
68
- #if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
69
- WSASetLastError(0);
70
- #else
71
- errno = 0;
72
- #endif
73
- }
74
-
75
- #if !defined(BOOST_ASIO_WINDOWS_RUNTIME)
76
-
77
- inline void get_last_error(
78
- boost::system::error_code& ec, bool is_error_condition)
79
- {
80
- if (!is_error_condition)
81
- {
82
- ec.assign(0, ec.category());
83
- }
84
- else
85
- {
86
- #if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
87
- ec = boost::system::error_code(WSAGetLastError(),
88
- boost::asio::error::get_system_category());
89
- #else
90
- ec = boost::system::error_code(errno,
91
- boost::asio::error::get_system_category());
92
- #endif
93
- }
94
- }
95
-
96
- template <typename SockLenType>
97
- inline socket_type call_accept(SockLenType msghdr::*,
98
- socket_type s, socket_addr_type* addr, std::size_t* addrlen)
99
- {
100
- SockLenType tmp_addrlen = addrlen ? (SockLenType)*addrlen : 0;
101
- socket_type result = ::accept(s, addr, addrlen ? &tmp_addrlen : 0);
102
- if (addrlen)
103
- *addrlen = (std::size_t)tmp_addrlen;
104
- return result;
105
- }
106
-
107
- socket_type accept(socket_type s, socket_addr_type* addr,
108
- std::size_t* addrlen, boost::system::error_code& ec)
109
- {
110
- if (s == invalid_socket)
111
- {
112
- ec = boost::asio::error::bad_descriptor;
113
- return invalid_socket;
114
- }
115
-
116
- socket_type new_s = call_accept(&msghdr::msg_namelen, s, addr, addrlen);
117
- get_last_error(ec, new_s == invalid_socket);
118
- if (new_s == invalid_socket)
119
- return new_s;
120
-
121
- #if defined(__MACH__) && defined(__APPLE__) || defined(__FreeBSD__)
122
- int optval = 1;
123
- int result = ::setsockopt(new_s, SOL_SOCKET,
124
- SO_NOSIGPIPE, &optval, sizeof(optval));
125
- get_last_error(ec, result != 0);
126
- if (result != 0)
127
- {
128
- ::close(new_s);
129
- return invalid_socket;
130
- }
131
- #endif
132
-
133
- ec.assign(0, ec.category());
134
- return new_s;
135
- }
136
-
137
- socket_type sync_accept(socket_type s, state_type state,
138
- socket_addr_type* addr, std::size_t* addrlen, boost::system::error_code& ec)
139
- {
140
- // Accept a socket.
141
- for (;;)
142
- {
143
- // Try to complete the operation without blocking.
144
- socket_type new_socket = socket_ops::accept(s, addr, addrlen, ec);
145
-
146
- // Check if operation succeeded.
147
- if (new_socket != invalid_socket)
148
- return new_socket;
149
-
150
- // Operation failed.
151
- if (ec == boost::asio::error::would_block
152
- || ec == boost::asio::error::try_again)
153
- {
154
- if (state & user_set_non_blocking)
155
- return invalid_socket;
156
- // Fall through to retry operation.
157
- }
158
- else if (ec == boost::asio::error::connection_aborted)
159
- {
160
- if (state & enable_connection_aborted)
161
- return invalid_socket;
162
- // Fall through to retry operation.
163
- }
164
- #if defined(EPROTO)
165
- else if (ec.value() == EPROTO)
166
- {
167
- if (state & enable_connection_aborted)
168
- return invalid_socket;
169
- // Fall through to retry operation.
170
- }
171
- #endif // defined(EPROTO)
172
- else
173
- return invalid_socket;
174
-
175
- // Wait for socket to become ready.
176
- if (socket_ops::poll_read(s, 0, -1, ec) < 0)
177
- return invalid_socket;
178
- }
179
- }
180
-
181
- #if defined(BOOST_ASIO_HAS_IOCP)
182
-
183
- void complete_iocp_accept(socket_type s,
184
- void* output_buffer, DWORD address_length,
185
- socket_addr_type* addr, std::size_t* addrlen,
186
- socket_type new_socket, boost::system::error_code& ec)
187
- {
188
- // Map non-portable errors to their portable counterparts.
189
- if (ec.value() == ERROR_NETNAME_DELETED)
190
- ec = boost::asio::error::connection_aborted;
191
-
192
- if (!ec)
193
- {
194
- // Get the address of the peer.
195
- if (addr && addrlen)
196
- {
197
- LPSOCKADDR local_addr = 0;
198
- int local_addr_length = 0;
199
- LPSOCKADDR remote_addr = 0;
200
- int remote_addr_length = 0;
201
- GetAcceptExSockaddrs(output_buffer, 0, address_length,
202
- address_length, &local_addr, &local_addr_length,
203
- &remote_addr, &remote_addr_length);
204
- if (static_cast<std::size_t>(remote_addr_length) > *addrlen)
205
- {
206
- ec = boost::asio::error::invalid_argument;
207
- }
208
- else
209
- {
210
- using namespace std; // For memcpy.
211
- memcpy(addr, remote_addr, remote_addr_length);
212
- *addrlen = static_cast<std::size_t>(remote_addr_length);
213
- }
214
- }
215
-
216
- // Need to set the SO_UPDATE_ACCEPT_CONTEXT option so that getsockname
217
- // and getpeername will work on the accepted socket.
218
- SOCKET update_ctx_param = s;
219
- socket_ops::state_type state = 0;
220
- socket_ops::setsockopt(new_socket, state,
221
- SOL_SOCKET, SO_UPDATE_ACCEPT_CONTEXT,
222
- &update_ctx_param, sizeof(SOCKET), ec);
223
- }
224
- }
225
-
226
- #else // defined(BOOST_ASIO_HAS_IOCP)
227
-
228
- bool non_blocking_accept(socket_type s,
229
- state_type state, socket_addr_type* addr, std::size_t* addrlen,
230
- boost::system::error_code& ec, socket_type& new_socket)
231
- {
232
- for (;;)
233
- {
234
- // Accept the waiting connection.
235
- new_socket = socket_ops::accept(s, addr, addrlen, ec);
236
-
237
- // Check if operation succeeded.
238
- if (new_socket != invalid_socket)
239
- return true;
240
-
241
- // Retry operation if interrupted by signal.
242
- if (ec == boost::asio::error::interrupted)
243
- continue;
244
-
245
- // Operation failed.
246
- if (ec == boost::asio::error::would_block
247
- || ec == boost::asio::error::try_again)
248
- {
249
- // Fall through to retry operation.
250
- }
251
- else if (ec == boost::asio::error::connection_aborted)
252
- {
253
- if (state & enable_connection_aborted)
254
- return true;
255
- // Fall through to retry operation.
256
- }
257
- #if defined(EPROTO)
258
- else if (ec.value() == EPROTO)
259
- {
260
- if (state & enable_connection_aborted)
261
- return true;
262
- // Fall through to retry operation.
263
- }
264
- #endif // defined(EPROTO)
265
- else
266
- return true;
267
-
268
- return false;
269
- }
270
- }
271
-
272
- #endif // defined(BOOST_ASIO_HAS_IOCP)
273
-
274
- template <typename SockLenType>
275
- inline int call_bind(SockLenType msghdr::*,
276
- socket_type s, const socket_addr_type* addr, std::size_t addrlen)
277
- {
278
- return ::bind(s, addr, (SockLenType)addrlen);
279
- }
280
-
281
- int bind(socket_type s, const socket_addr_type* addr,
282
- std::size_t addrlen, boost::system::error_code& ec)
283
- {
284
- if (s == invalid_socket)
285
- {
286
- ec = boost::asio::error::bad_descriptor;
287
- return socket_error_retval;
288
- }
289
-
290
- int result = call_bind(&msghdr::msg_namelen, s, addr, addrlen);
291
- get_last_error(ec, result != 0);
292
- return result;
293
- }
294
-
295
- int close(socket_type s, state_type& state,
296
- bool destruction, boost::system::error_code& ec)
297
- {
298
- int result = 0;
299
- if (s != invalid_socket)
300
- {
301
- // We don't want the destructor to block, so set the socket to linger in
302
- // the background. If the user doesn't like this behaviour then they need
303
- // to explicitly close the socket.
304
- if (destruction && (state & user_set_linger))
305
- {
306
- ::linger opt;
307
- opt.l_onoff = 0;
308
- opt.l_linger = 0;
309
- boost::system::error_code ignored_ec;
310
- socket_ops::setsockopt(s, state, SOL_SOCKET,
311
- SO_LINGER, &opt, sizeof(opt), ignored_ec);
312
- }
313
-
314
- #if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
315
- result = ::closesocket(s);
316
- #else // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
317
- result = ::close(s);
318
- #endif // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
319
- get_last_error(ec, result != 0);
320
-
321
- if (result != 0
322
- && (ec == boost::asio::error::would_block
323
- || ec == boost::asio::error::try_again))
324
- {
325
- // According to UNIX Network Programming Vol. 1, it is possible for
326
- // close() to fail with EWOULDBLOCK under certain circumstances. What
327
- // isn't clear is the state of the descriptor after this error. The one
328
- // current OS where this behaviour is seen, Windows, says that the socket
329
- // remains open. Therefore we'll put the descriptor back into blocking
330
- // mode and have another attempt at closing it.
331
- #if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
332
- ioctl_arg_type arg = 0;
333
- ::ioctlsocket(s, FIONBIO, &arg);
334
- #else // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
335
- # if defined(__SYMBIAN32__) || defined(__EMSCRIPTEN__)
336
- int flags = ::fcntl(s, F_GETFL, 0);
337
- if (flags >= 0)
338
- ::fcntl(s, F_SETFL, flags & ~O_NONBLOCK);
339
- # else // defined(__SYMBIAN32__) || defined(__EMSCRIPTEN__)
340
- ioctl_arg_type arg = 0;
341
- ::ioctl(s, FIONBIO, &arg);
342
- # endif // defined(__SYMBIAN32__) || defined(__EMSCRIPTEN__)
343
- #endif // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
344
- state &= ~non_blocking;
345
-
346
- #if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
347
- result = ::closesocket(s);
348
- #else // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
349
- result = ::close(s);
350
- #endif // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
351
- get_last_error(ec, result != 0);
352
- }
353
- }
354
-
355
- return result;
356
- }
357
-
358
- bool set_user_non_blocking(socket_type s,
359
- state_type& state, bool value, boost::system::error_code& ec)
360
- {
361
- if (s == invalid_socket)
362
- {
363
- ec = boost::asio::error::bad_descriptor;
364
- return false;
365
- }
366
-
367
- #if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
368
- ioctl_arg_type arg = (value ? 1 : 0);
369
- int result = ::ioctlsocket(s, FIONBIO, &arg);
370
- get_last_error(ec, result < 0);
371
- #elif defined(__SYMBIAN32__) || defined(__EMSCRIPTEN__)
372
- int result = ::fcntl(s, F_GETFL, 0);
373
- get_last_error(ec, result < 0);
374
- if (result >= 0)
375
- {
376
- int flag = (value ? (result | O_NONBLOCK) : (result & ~O_NONBLOCK));
377
- result = ::fcntl(s, F_SETFL, flag);
378
- get_last_error(ec, result < 0);
379
- }
380
- #else
381
- ioctl_arg_type arg = (value ? 1 : 0);
382
- int result = ::ioctl(s, FIONBIO, &arg);
383
- get_last_error(ec, result < 0);
384
- #endif
385
-
386
- if (result >= 0)
387
- {
388
- if (value)
389
- state |= user_set_non_blocking;
390
- else
391
- {
392
- // Clearing the user-set non-blocking mode always overrides any
393
- // internally-set non-blocking flag. Any subsequent asynchronous
394
- // operations will need to re-enable non-blocking I/O.
395
- state &= ~(user_set_non_blocking | internal_non_blocking);
396
- }
397
- return true;
398
- }
399
-
400
- return false;
401
- }
402
-
403
- bool set_internal_non_blocking(socket_type s,
404
- state_type& state, bool value, boost::system::error_code& ec)
405
- {
406
- if (s == invalid_socket)
407
- {
408
- ec = boost::asio::error::bad_descriptor;
409
- return false;
410
- }
411
-
412
- if (!value && (state & user_set_non_blocking))
413
- {
414
- // It does not make sense to clear the internal non-blocking flag if the
415
- // user still wants non-blocking behaviour. Return an error and let the
416
- // caller figure out whether to update the user-set non-blocking flag.
417
- ec = boost::asio::error::invalid_argument;
418
- return false;
419
- }
420
-
421
- #if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
422
- ioctl_arg_type arg = (value ? 1 : 0);
423
- int result = ::ioctlsocket(s, FIONBIO, &arg);
424
- get_last_error(ec, result < 0);
425
- #elif defined(__SYMBIAN32__) || defined(__EMSCRIPTEN__)
426
- int result = ::fcntl(s, F_GETFL, 0);
427
- get_last_error(ec, result < 0);
428
- if (result >= 0)
429
- {
430
- int flag = (value ? (result | O_NONBLOCK) : (result & ~O_NONBLOCK));
431
- result = ::fcntl(s, F_SETFL, flag);
432
- get_last_error(ec, result < 0);
433
- }
434
- #else
435
- ioctl_arg_type arg = (value ? 1 : 0);
436
- int result = ::ioctl(s, FIONBIO, &arg);
437
- get_last_error(ec, result < 0);
438
- #endif
439
-
440
- if (result >= 0)
441
- {
442
- if (value)
443
- state |= internal_non_blocking;
444
- else
445
- state &= ~internal_non_blocking;
446
- return true;
447
- }
448
-
449
- return false;
450
- }
451
-
452
- int shutdown(socket_type s, int what, boost::system::error_code& ec)
453
- {
454
- if (s == invalid_socket)
455
- {
456
- ec = boost::asio::error::bad_descriptor;
457
- return socket_error_retval;
458
- }
459
-
460
- int result = ::shutdown(s, what);
461
- get_last_error(ec, result != 0);
462
- return result;
463
- }
464
-
465
- template <typename SockLenType>
466
- inline int call_connect(SockLenType msghdr::*,
467
- socket_type s, const socket_addr_type* addr, std::size_t addrlen)
468
- {
469
- return ::connect(s, addr, (SockLenType)addrlen);
470
- }
471
-
472
- int connect(socket_type s, const socket_addr_type* addr,
473
- std::size_t addrlen, boost::system::error_code& ec)
474
- {
475
- if (s == invalid_socket)
476
- {
477
- ec = boost::asio::error::bad_descriptor;
478
- return socket_error_retval;
479
- }
480
-
481
- int result = call_connect(&msghdr::msg_namelen, s, addr, addrlen);
482
- get_last_error(ec, result != 0);
483
- #if defined(__linux__)
484
- if (result != 0 && ec == boost::asio::error::try_again)
485
- ec = boost::asio::error::no_buffer_space;
486
- #endif // defined(__linux__)
487
- return result;
488
- }
489
-
490
- void sync_connect(socket_type s, const socket_addr_type* addr,
491
- std::size_t addrlen, boost::system::error_code& ec)
492
- {
493
- // Perform the connect operation.
494
- socket_ops::connect(s, addr, addrlen, ec);
495
- if (ec != boost::asio::error::in_progress
496
- && ec != boost::asio::error::would_block)
497
- {
498
- // The connect operation finished immediately.
499
- return;
500
- }
501
-
502
- // Wait for socket to become ready.
503
- if (socket_ops::poll_connect(s, -1, ec) < 0)
504
- return;
505
-
506
- // Get the error code from the connect operation.
507
- int connect_error = 0;
508
- size_t connect_error_len = sizeof(connect_error);
509
- if (socket_ops::getsockopt(s, 0, SOL_SOCKET, SO_ERROR,
510
- &connect_error, &connect_error_len, ec) == socket_error_retval)
511
- return;
512
-
513
- // Return the result of the connect operation.
514
- ec = boost::system::error_code(connect_error,
515
- boost::asio::error::get_system_category());
516
- }
517
-
518
- #if defined(BOOST_ASIO_HAS_IOCP)
519
-
520
- void complete_iocp_connect(socket_type s, boost::system::error_code& ec)
521
- {
522
- // Map non-portable errors to their portable counterparts.
523
- switch (ec.value())
524
- {
525
- case ERROR_CONNECTION_REFUSED:
526
- ec = boost::asio::error::connection_refused;
527
- break;
528
- case ERROR_NETWORK_UNREACHABLE:
529
- ec = boost::asio::error::network_unreachable;
530
- break;
531
- case ERROR_HOST_UNREACHABLE:
532
- ec = boost::asio::error::host_unreachable;
533
- break;
534
- case ERROR_SEM_TIMEOUT:
535
- ec = boost::asio::error::timed_out;
536
- break;
537
- default:
538
- break;
539
- }
540
-
541
- if (!ec)
542
- {
543
- // Need to set the SO_UPDATE_CONNECT_CONTEXT option so that getsockname
544
- // and getpeername will work on the connected socket.
545
- socket_ops::state_type state = 0;
546
- const int so_update_connect_context = 0x7010;
547
- socket_ops::setsockopt(s, state, SOL_SOCKET,
548
- so_update_connect_context, 0, 0, ec);
549
- }
550
- }
551
-
552
- #endif // defined(BOOST_ASIO_HAS_IOCP)
553
-
554
- bool non_blocking_connect(socket_type s, boost::system::error_code& ec)
555
- {
556
- // Check if the connect operation has finished. This is required since we may
557
- // get spurious readiness notifications from the reactor.
558
- #if defined(BOOST_ASIO_WINDOWS) \
559
- || defined(__CYGWIN__) \
560
- || defined(__SYMBIAN32__)
561
- fd_set write_fds;
562
- FD_ZERO(&write_fds);
563
- FD_SET(s, &write_fds);
564
- fd_set except_fds;
565
- FD_ZERO(&except_fds);
566
- FD_SET(s, &except_fds);
567
- timeval zero_timeout;
568
- zero_timeout.tv_sec = 0;
569
- zero_timeout.tv_usec = 0;
570
- int ready = ::select(s + 1, 0, &write_fds, &except_fds, &zero_timeout);
571
- #else // defined(BOOST_ASIO_WINDOWS)
572
- // || defined(__CYGWIN__)
573
- // || defined(__SYMBIAN32__)
574
- pollfd fds;
575
- fds.fd = s;
576
- fds.events = POLLOUT;
577
- fds.revents = 0;
578
- int ready = ::poll(&fds, 1, 0);
579
- #endif // defined(BOOST_ASIO_WINDOWS)
580
- // || defined(__CYGWIN__)
581
- // || defined(__SYMBIAN32__)
582
- if (ready == 0)
583
- {
584
- // The asynchronous connect operation is still in progress.
585
- return false;
586
- }
587
-
588
- // Get the error code from the connect operation.
589
- int connect_error = 0;
590
- size_t connect_error_len = sizeof(connect_error);
591
- if (socket_ops::getsockopt(s, 0, SOL_SOCKET, SO_ERROR,
592
- &connect_error, &connect_error_len, ec) == 0)
593
- {
594
- if (connect_error)
595
- {
596
- ec = boost::system::error_code(connect_error,
597
- boost::asio::error::get_system_category());
598
- }
599
- else
600
- ec.assign(0, ec.category());
601
- }
602
-
603
- return true;
604
- }
605
-
606
- int socketpair(int af, int type, int protocol,
607
- socket_type sv[2], boost::system::error_code& ec)
608
- {
609
- #if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
610
- (void)(af);
611
- (void)(type);
612
- (void)(protocol);
613
- (void)(sv);
614
- ec = boost::asio::error::operation_not_supported;
615
- return socket_error_retval;
616
- #else
617
- int result = ::socketpair(af, type, protocol, sv);
618
- get_last_error(ec, result != 0);
619
- return result;
620
- #endif
621
- }
622
-
623
- bool sockatmark(socket_type s, boost::system::error_code& ec)
624
- {
625
- if (s == invalid_socket)
626
- {
627
- ec = boost::asio::error::bad_descriptor;
628
- return false;
629
- }
630
-
631
- #if defined(SIOCATMARK)
632
- ioctl_arg_type value = 0;
633
- # if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
634
- int result = ::ioctlsocket(s, SIOCATMARK, &value);
635
- # else // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
636
- int result = ::ioctl(s, SIOCATMARK, &value);
637
- # endif // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
638
- get_last_error(ec, result < 0);
639
- # if defined(ENOTTY)
640
- if (ec.value() == ENOTTY)
641
- ec = boost::asio::error::not_socket;
642
- # endif // defined(ENOTTY)
643
- #else // defined(SIOCATMARK)
644
- int value = ::sockatmark(s);
645
- get_last_error(ec, result < 0);
646
- #endif // defined(SIOCATMARK)
647
-
648
- return ec ? false : value != 0;
649
- }
650
-
651
- size_t available(socket_type s, boost::system::error_code& ec)
652
- {
653
- if (s == invalid_socket)
654
- {
655
- ec = boost::asio::error::bad_descriptor;
656
- return 0;
657
- }
658
-
659
- ioctl_arg_type value = 0;
660
- #if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
661
- int result = ::ioctlsocket(s, FIONREAD, &value);
662
- #else // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
663
- int result = ::ioctl(s, FIONREAD, &value);
664
- #endif // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
665
- get_last_error(ec, result < 0);
666
- #if defined(ENOTTY)
667
- if (ec.value() == ENOTTY)
668
- ec = boost::asio::error::not_socket;
669
- #endif // defined(ENOTTY)
670
-
671
- return ec ? static_cast<size_t>(0) : static_cast<size_t>(value);
672
- }
673
-
674
- int listen(socket_type s, int backlog, boost::system::error_code& ec)
675
- {
676
- if (s == invalid_socket)
677
- {
678
- ec = boost::asio::error::bad_descriptor;
679
- return socket_error_retval;
680
- }
681
-
682
- int result = ::listen(s, backlog);
683
- get_last_error(ec, result != 0);
684
- return result;
685
- }
686
-
687
- inline void init_buf_iov_base(void*& base, void* addr)
688
- {
689
- base = addr;
690
- }
691
-
692
- template <typename T>
693
- inline void init_buf_iov_base(T& base, void* addr)
694
- {
695
- base = static_cast<T>(addr);
696
- }
697
-
698
- #if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
699
- typedef WSABUF buf;
700
- #else // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
701
- typedef iovec buf;
702
- #endif // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
703
-
704
- void init_buf(buf& b, void* data, size_t size)
705
- {
706
- #if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
707
- b.buf = static_cast<char*>(data);
708
- b.len = static_cast<u_long>(size);
709
- #else // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
710
- init_buf_iov_base(b.iov_base, data);
711
- b.iov_len = size;
712
- #endif // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
713
- }
714
-
715
- void init_buf(buf& b, const void* data, size_t size)
716
- {
717
- #if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
718
- b.buf = static_cast<char*>(const_cast<void*>(data));
719
- b.len = static_cast<u_long>(size);
720
- #else // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
721
- init_buf_iov_base(b.iov_base, const_cast<void*>(data));
722
- b.iov_len = size;
723
- #endif // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
724
- }
725
-
726
- inline void init_msghdr_msg_name(void*& name, socket_addr_type* addr)
727
- {
728
- name = addr;
729
- }
730
-
731
- inline void init_msghdr_msg_name(void*& name, const socket_addr_type* addr)
732
- {
733
- name = const_cast<socket_addr_type*>(addr);
734
- }
735
-
736
- template <typename T>
737
- inline void init_msghdr_msg_name(T& name, socket_addr_type* addr)
738
- {
739
- name = reinterpret_cast<T>(addr);
740
- }
741
-
742
- template <typename T>
743
- inline void init_msghdr_msg_name(T& name, const socket_addr_type* addr)
744
- {
745
- name = reinterpret_cast<T>(const_cast<socket_addr_type*>(addr));
746
- }
747
-
748
- signed_size_type recv(socket_type s, buf* bufs, size_t count,
749
- int flags, boost::system::error_code& ec)
750
- {
751
- #if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
752
- // Receive some data.
753
- DWORD recv_buf_count = static_cast<DWORD>(count);
754
- DWORD bytes_transferred = 0;
755
- DWORD recv_flags = flags;
756
- int result = ::WSARecv(s, bufs, recv_buf_count,
757
- &bytes_transferred, &recv_flags, 0, 0);
758
- get_last_error(ec, true);
759
- if (ec.value() == ERROR_NETNAME_DELETED)
760
- ec = boost::asio::error::connection_reset;
761
- else if (ec.value() == ERROR_PORT_UNREACHABLE)
762
- ec = boost::asio::error::connection_refused;
763
- else if (ec.value() == WSAEMSGSIZE || ec.value() == ERROR_MORE_DATA)
764
- result = 0;
765
- if (result != 0)
766
- return socket_error_retval;
767
- ec.assign(0, ec.category());
768
- return bytes_transferred;
769
- #else // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
770
- msghdr msg = msghdr();
771
- msg.msg_iov = bufs;
772
- msg.msg_iovlen = static_cast<int>(count);
773
- signed_size_type result = ::recvmsg(s, &msg, flags);
774
- get_last_error(ec, result < 0);
775
- return result;
776
- #endif // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
777
- }
778
-
779
- signed_size_type recv1(socket_type s, void* data, size_t size,
780
- int flags, boost::system::error_code& ec)
781
- {
782
- #if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
783
- // Receive some data.
784
- WSABUF buf;
785
- buf.buf = const_cast<char*>(static_cast<const char*>(data));
786
- buf.len = static_cast<ULONG>(size);
787
- DWORD bytes_transferred = 0;
788
- DWORD recv_flags = flags;
789
- int result = ::WSARecv(s, &buf, 1,
790
- &bytes_transferred, &recv_flags, 0, 0);
791
- get_last_error(ec, true);
792
- if (ec.value() == ERROR_NETNAME_DELETED)
793
- ec = boost::asio::error::connection_reset;
794
- else if (ec.value() == ERROR_PORT_UNREACHABLE)
795
- ec = boost::asio::error::connection_refused;
796
- else if (ec.value() == WSAEMSGSIZE || ec.value() == ERROR_MORE_DATA)
797
- result = 0;
798
- if (result != 0)
799
- return socket_error_retval;
800
- ec.assign(0, ec.category());
801
- return bytes_transferred;
802
- #else // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
803
- signed_size_type result = ::recv(s, static_cast<char*>(data), size, flags);
804
- get_last_error(ec, result < 0);
805
- return result;
806
- #endif // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
807
- }
808
-
809
- size_t sync_recv(socket_type s, state_type state, buf* bufs,
810
- size_t count, int flags, bool all_empty, boost::system::error_code& ec)
811
- {
812
- if (s == invalid_socket)
813
- {
814
- ec = boost::asio::error::bad_descriptor;
815
- return 0;
816
- }
817
-
818
- // A request to read 0 bytes on a stream is a no-op.
819
- if (all_empty && (state & stream_oriented))
820
- {
821
- ec.assign(0, ec.category());
822
- return 0;
823
- }
824
-
825
- // Read some data.
826
- for (;;)
827
- {
828
- // Try to complete the operation without blocking.
829
- signed_size_type bytes = socket_ops::recv(s, bufs, count, flags, ec);
830
-
831
- // Check for EOF.
832
- if ((state & stream_oriented) && bytes == 0)
833
- {
834
- ec = boost::asio::error::eof;
835
- return 0;
836
- }
837
-
838
- // Check if operation succeeded.
839
- if (bytes >= 0)
840
- return bytes;
841
-
842
- // Operation failed.
843
- if ((state & user_set_non_blocking)
844
- || (ec != boost::asio::error::would_block
845
- && ec != boost::asio::error::try_again))
846
- return 0;
847
-
848
- // Wait for socket to become ready.
849
- if (socket_ops::poll_read(s, 0, -1, ec) < 0)
850
- return 0;
851
- }
852
- }
853
-
854
- size_t sync_recv1(socket_type s, state_type state, void* data,
855
- size_t size, int flags, boost::system::error_code& ec)
856
- {
857
- if (s == invalid_socket)
858
- {
859
- ec = boost::asio::error::bad_descriptor;
860
- return 0;
861
- }
862
-
863
- // A request to read 0 bytes on a stream is a no-op.
864
- if (size == 0 && (state & stream_oriented))
865
- {
866
- ec.assign(0, ec.category());
867
- return 0;
868
- }
869
-
870
- // Read some data.
871
- for (;;)
872
- {
873
- // Try to complete the operation without blocking.
874
- signed_size_type bytes = socket_ops::recv1(s, data, size, flags, ec);
875
-
876
- // Check for EOF.
877
- if ((state & stream_oriented) && bytes == 0)
878
- {
879
- ec = boost::asio::error::eof;
880
- return 0;
881
- }
882
-
883
- // Check if operation succeeded.
884
- if (bytes >= 0)
885
- return bytes;
886
-
887
- // Operation failed.
888
- if ((state & user_set_non_blocking)
889
- || (ec != boost::asio::error::would_block
890
- && ec != boost::asio::error::try_again))
891
- return 0;
892
-
893
- // Wait for socket to become ready.
894
- if (socket_ops::poll_read(s, 0, -1, ec) < 0)
895
- return 0;
896
- }
897
- }
898
-
899
- #if defined(BOOST_ASIO_HAS_IOCP)
900
-
901
- void complete_iocp_recv(state_type state,
902
- const weak_cancel_token_type& cancel_token, bool all_empty,
903
- boost::system::error_code& ec, size_t bytes_transferred)
904
- {
905
- // Map non-portable errors to their portable counterparts.
906
- if (ec.value() == ERROR_NETNAME_DELETED)
907
- {
908
- if (cancel_token.expired())
909
- ec = boost::asio::error::operation_aborted;
910
- else
911
- ec = boost::asio::error::connection_reset;
912
- }
913
- else if (ec.value() == ERROR_PORT_UNREACHABLE)
914
- {
915
- ec = boost::asio::error::connection_refused;
916
- }
917
- else if (ec.value() == WSAEMSGSIZE || ec.value() == ERROR_MORE_DATA)
918
- {
919
- ec.assign(0, ec.category());
920
- }
921
-
922
- // Check for connection closed.
923
- else if (!ec && bytes_transferred == 0
924
- && (state & stream_oriented) != 0
925
- && !all_empty)
926
- {
927
- ec = boost::asio::error::eof;
928
- }
929
- }
930
-
931
- #else // defined(BOOST_ASIO_HAS_IOCP)
932
-
933
- bool non_blocking_recv(socket_type s,
934
- buf* bufs, size_t count, int flags, bool is_stream,
935
- boost::system::error_code& ec, size_t& bytes_transferred)
936
- {
937
- for (;;)
938
- {
939
- // Read some data.
940
- signed_size_type bytes = socket_ops::recv(s, bufs, count, flags, ec);
941
-
942
- // Check for end of stream.
943
- if (is_stream && bytes == 0)
944
- {
945
- ec = boost::asio::error::eof;
946
- return true;
947
- }
948
-
949
- // Check if operation succeeded.
950
- if (bytes >= 0)
951
- {
952
- bytes_transferred = bytes;
953
- return true;
954
- }
955
-
956
- // Retry operation if interrupted by signal.
957
- if (ec == boost::asio::error::interrupted)
958
- continue;
959
-
960
- // Check if we need to run the operation again.
961
- if (ec == boost::asio::error::would_block
962
- || ec == boost::asio::error::try_again)
963
- return false;
964
-
965
- // Operation failed.
966
- bytes_transferred = 0;
967
- return true;
968
- }
969
- }
970
-
971
- bool non_blocking_recv1(socket_type s,
972
- void* data, size_t size, int flags, bool is_stream,
973
- boost::system::error_code& ec, size_t& bytes_transferred)
974
- {
975
- for (;;)
976
- {
977
- // Read some data.
978
- signed_size_type bytes = socket_ops::recv1(s, data, size, flags, ec);
979
-
980
- // Check for end of stream.
981
- if (is_stream && bytes == 0)
982
- {
983
- ec = boost::asio::error::eof;
984
- return true;
985
- }
986
-
987
- // Check if operation succeeded.
988
- if (bytes >= 0)
989
- {
990
- bytes_transferred = bytes;
991
- return true;
992
- }
993
-
994
- // Retry operation if interrupted by signal.
995
- if (ec == boost::asio::error::interrupted)
996
- continue;
997
-
998
- // Check if we need to run the operation again.
999
- if (ec == boost::asio::error::would_block
1000
- || ec == boost::asio::error::try_again)
1001
- return false;
1002
-
1003
- // Operation failed.
1004
- bytes_transferred = 0;
1005
- return true;
1006
- }
1007
- }
1008
-
1009
- #endif // defined(BOOST_ASIO_HAS_IOCP)
1010
-
1011
- signed_size_type recvfrom(socket_type s, buf* bufs, size_t count,
1012
- int flags, socket_addr_type* addr, std::size_t* addrlen,
1013
- boost::system::error_code& ec)
1014
- {
1015
- #if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
1016
- // Receive some data.
1017
- DWORD recv_buf_count = static_cast<DWORD>(count);
1018
- DWORD bytes_transferred = 0;
1019
- DWORD recv_flags = flags;
1020
- int tmp_addrlen = (int)*addrlen;
1021
- int result = ::WSARecvFrom(s, bufs, recv_buf_count,
1022
- &bytes_transferred, &recv_flags, addr, &tmp_addrlen, 0, 0);
1023
- get_last_error(ec, true);
1024
- *addrlen = (std::size_t)tmp_addrlen;
1025
- if (ec.value() == ERROR_NETNAME_DELETED)
1026
- ec = boost::asio::error::connection_reset;
1027
- else if (ec.value() == ERROR_PORT_UNREACHABLE)
1028
- ec = boost::asio::error::connection_refused;
1029
- else if (ec.value() == WSAEMSGSIZE || ec.value() == ERROR_MORE_DATA)
1030
- result = 0;
1031
- if (result != 0)
1032
- return socket_error_retval;
1033
- ec.assign(0, ec.category());
1034
- return bytes_transferred;
1035
- #else // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
1036
- msghdr msg = msghdr();
1037
- init_msghdr_msg_name(msg.msg_name, addr);
1038
- msg.msg_namelen = static_cast<int>(*addrlen);
1039
- msg.msg_iov = bufs;
1040
- msg.msg_iovlen = static_cast<int>(count);
1041
- signed_size_type result = ::recvmsg(s, &msg, flags);
1042
- get_last_error(ec, result < 0);
1043
- *addrlen = msg.msg_namelen;
1044
- return result;
1045
- #endif // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
1046
- }
1047
-
1048
- template <typename SockLenType>
1049
- inline signed_size_type call_recvfrom(SockLenType msghdr::*,
1050
- socket_type s, void* data, size_t size, int flags,
1051
- socket_addr_type* addr, std::size_t* addrlen)
1052
- {
1053
- SockLenType tmp_addrlen = addrlen ? (SockLenType)*addrlen : 0;
1054
- signed_size_type result = ::recvfrom(s, static_cast<char*>(data),
1055
- size, flags, addr, addrlen ? &tmp_addrlen : 0);
1056
- if (addrlen)
1057
- *addrlen = (std::size_t)tmp_addrlen;
1058
- return result;
1059
- }
1060
-
1061
- signed_size_type recvfrom1(socket_type s, void* data, size_t size,
1062
- int flags, socket_addr_type* addr, std::size_t* addrlen,
1063
- boost::system::error_code& ec)
1064
- {
1065
- #if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
1066
- // Receive some data.
1067
- WSABUF buf;
1068
- buf.buf = static_cast<char*>(data);
1069
- buf.len = static_cast<ULONG>(size);
1070
- DWORD bytes_transferred = 0;
1071
- DWORD recv_flags = flags;
1072
- int tmp_addrlen = (int)*addrlen;
1073
- int result = ::WSARecvFrom(s, &buf, 1, &bytes_transferred,
1074
- &recv_flags, addr, &tmp_addrlen, 0, 0);
1075
- get_last_error(ec, true);
1076
- *addrlen = (std::size_t)tmp_addrlen;
1077
- if (ec.value() == ERROR_NETNAME_DELETED)
1078
- ec = boost::asio::error::connection_reset;
1079
- else if (ec.value() == ERROR_PORT_UNREACHABLE)
1080
- ec = boost::asio::error::connection_refused;
1081
- else if (ec.value() == WSAEMSGSIZE || ec.value() == ERROR_MORE_DATA)
1082
- result = 0;
1083
- if (result != 0)
1084
- return socket_error_retval;
1085
- ec.assign(0, ec.category());
1086
- return bytes_transferred;
1087
- #else // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
1088
- signed_size_type result = call_recvfrom(&msghdr::msg_namelen,
1089
- s, data, size, flags, addr, addrlen);
1090
- get_last_error(ec, result < 0);
1091
- return result;
1092
- #endif // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
1093
- }
1094
-
1095
- size_t sync_recvfrom(socket_type s, state_type state, buf* bufs,
1096
- size_t count, int flags, socket_addr_type* addr,
1097
- std::size_t* addrlen, boost::system::error_code& ec)
1098
- {
1099
- if (s == invalid_socket)
1100
- {
1101
- ec = boost::asio::error::bad_descriptor;
1102
- return 0;
1103
- }
1104
-
1105
- // Read some data.
1106
- for (;;)
1107
- {
1108
- // Try to complete the operation without blocking.
1109
- signed_size_type bytes = socket_ops::recvfrom(
1110
- s, bufs, count, flags, addr, addrlen, ec);
1111
-
1112
- // Check if operation succeeded.
1113
- if (bytes >= 0)
1114
- return bytes;
1115
-
1116
- // Operation failed.
1117
- if ((state & user_set_non_blocking)
1118
- || (ec != boost::asio::error::would_block
1119
- && ec != boost::asio::error::try_again))
1120
- return 0;
1121
-
1122
- // Wait for socket to become ready.
1123
- if (socket_ops::poll_read(s, 0, -1, ec) < 0)
1124
- return 0;
1125
- }
1126
- }
1127
-
1128
- size_t sync_recvfrom1(socket_type s, state_type state, void* data,
1129
- size_t size, int flags, socket_addr_type* addr,
1130
- std::size_t* addrlen, boost::system::error_code& ec)
1131
- {
1132
- if (s == invalid_socket)
1133
- {
1134
- ec = boost::asio::error::bad_descriptor;
1135
- return 0;
1136
- }
1137
-
1138
- // Read some data.
1139
- for (;;)
1140
- {
1141
- // Try to complete the operation without blocking.
1142
- signed_size_type bytes = socket_ops::recvfrom1(
1143
- s, data, size, flags, addr, addrlen, ec);
1144
-
1145
- // Check if operation succeeded.
1146
- if (bytes >= 0)
1147
- return bytes;
1148
-
1149
- // Operation failed.
1150
- if ((state & user_set_non_blocking)
1151
- || (ec != boost::asio::error::would_block
1152
- && ec != boost::asio::error::try_again))
1153
- return 0;
1154
-
1155
- // Wait for socket to become ready.
1156
- if (socket_ops::poll_read(s, 0, -1, ec) < 0)
1157
- return 0;
1158
- }
1159
- }
1160
-
1161
- #if defined(BOOST_ASIO_HAS_IOCP)
1162
-
1163
- void complete_iocp_recvfrom(
1164
- const weak_cancel_token_type& cancel_token,
1165
- boost::system::error_code& ec)
1166
- {
1167
- // Map non-portable errors to their portable counterparts.
1168
- if (ec.value() == ERROR_NETNAME_DELETED)
1169
- {
1170
- if (cancel_token.expired())
1171
- ec = boost::asio::error::operation_aborted;
1172
- else
1173
- ec = boost::asio::error::connection_reset;
1174
- }
1175
- else if (ec.value() == ERROR_PORT_UNREACHABLE)
1176
- {
1177
- ec = boost::asio::error::connection_refused;
1178
- }
1179
- else if (ec.value() == WSAEMSGSIZE || ec.value() == ERROR_MORE_DATA)
1180
- {
1181
- ec.assign(0, ec.category());
1182
- }
1183
- }
1184
-
1185
- #else // defined(BOOST_ASIO_HAS_IOCP)
1186
-
1187
- bool non_blocking_recvfrom(socket_type s,
1188
- buf* bufs, size_t count, int flags,
1189
- socket_addr_type* addr, std::size_t* addrlen,
1190
- boost::system::error_code& ec, size_t& bytes_transferred)
1191
- {
1192
- for (;;)
1193
- {
1194
- // Read some data.
1195
- signed_size_type bytes = socket_ops::recvfrom(
1196
- s, bufs, count, flags, addr, addrlen, ec);
1197
-
1198
- // Check if operation succeeded.
1199
- if (bytes >= 0)
1200
- {
1201
- bytes_transferred = bytes;
1202
- return true;
1203
- }
1204
-
1205
- // Retry operation if interrupted by signal.
1206
- if (ec == boost::asio::error::interrupted)
1207
- continue;
1208
-
1209
- // Check if we need to run the operation again.
1210
- if (ec == boost::asio::error::would_block
1211
- || ec == boost::asio::error::try_again)
1212
- return false;
1213
-
1214
- // Operation failed.
1215
- bytes_transferred = 0;
1216
- return true;
1217
- }
1218
- }
1219
-
1220
- bool non_blocking_recvfrom1(socket_type s,
1221
- void* data, size_t size, int flags,
1222
- socket_addr_type* addr, std::size_t* addrlen,
1223
- boost::system::error_code& ec, size_t& bytes_transferred)
1224
- {
1225
- for (;;)
1226
- {
1227
- // Read some data.
1228
- signed_size_type bytes = socket_ops::recvfrom1(
1229
- s, data, size, flags, addr, addrlen, ec);
1230
-
1231
- // Check if operation succeeded.
1232
- if (bytes >= 0)
1233
- {
1234
- bytes_transferred = bytes;
1235
- return true;
1236
- }
1237
-
1238
- // Retry operation if interrupted by signal.
1239
- if (ec == boost::asio::error::interrupted)
1240
- continue;
1241
-
1242
- // Check if we need to run the operation again.
1243
- if (ec == boost::asio::error::would_block
1244
- || ec == boost::asio::error::try_again)
1245
- return false;
1246
-
1247
- // Operation failed.
1248
- bytes_transferred = 0;
1249
- return true;
1250
- }
1251
- }
1252
-
1253
- #endif // defined(BOOST_ASIO_HAS_IOCP)
1254
-
1255
- signed_size_type recvmsg(socket_type s, buf* bufs, size_t count,
1256
- int in_flags, int& out_flags, boost::system::error_code& ec)
1257
- {
1258
- #if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
1259
- out_flags = 0;
1260
- return socket_ops::recv(s, bufs, count, in_flags, ec);
1261
- #else // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
1262
- msghdr msg = msghdr();
1263
- msg.msg_iov = bufs;
1264
- msg.msg_iovlen = static_cast<int>(count);
1265
- signed_size_type result = ::recvmsg(s, &msg, in_flags);
1266
- get_last_error(ec, result < 0);
1267
- if (result >= 0)
1268
- out_flags = msg.msg_flags;
1269
- else
1270
- out_flags = 0;
1271
- return result;
1272
- #endif // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
1273
- }
1274
-
1275
- size_t sync_recvmsg(socket_type s, state_type state,
1276
- buf* bufs, size_t count, int in_flags, int& out_flags,
1277
- boost::system::error_code& ec)
1278
- {
1279
- if (s == invalid_socket)
1280
- {
1281
- ec = boost::asio::error::bad_descriptor;
1282
- return 0;
1283
- }
1284
-
1285
- // Read some data.
1286
- for (;;)
1287
- {
1288
- // Try to complete the operation without blocking.
1289
- signed_size_type bytes = socket_ops::recvmsg(
1290
- s, bufs, count, in_flags, out_flags, ec);
1291
-
1292
- // Check if operation succeeded.
1293
- if (bytes >= 0)
1294
- return bytes;
1295
-
1296
- // Operation failed.
1297
- if ((state & user_set_non_blocking)
1298
- || (ec != boost::asio::error::would_block
1299
- && ec != boost::asio::error::try_again))
1300
- return 0;
1301
-
1302
- // Wait for socket to become ready.
1303
- if (socket_ops::poll_read(s, 0, -1, ec) < 0)
1304
- return 0;
1305
- }
1306
- }
1307
-
1308
- #if defined(BOOST_ASIO_HAS_IOCP)
1309
-
1310
- void complete_iocp_recvmsg(
1311
- const weak_cancel_token_type& cancel_token,
1312
- boost::system::error_code& ec)
1313
- {
1314
- // Map non-portable errors to their portable counterparts.
1315
- if (ec.value() == ERROR_NETNAME_DELETED)
1316
- {
1317
- if (cancel_token.expired())
1318
- ec = boost::asio::error::operation_aborted;
1319
- else
1320
- ec = boost::asio::error::connection_reset;
1321
- }
1322
- else if (ec.value() == ERROR_PORT_UNREACHABLE)
1323
- {
1324
- ec = boost::asio::error::connection_refused;
1325
- }
1326
- else if (ec.value() == WSAEMSGSIZE || ec.value() == ERROR_MORE_DATA)
1327
- {
1328
- ec.assign(0, ec.category());
1329
- }
1330
- }
1331
-
1332
- #else // defined(BOOST_ASIO_HAS_IOCP)
1333
-
1334
- bool non_blocking_recvmsg(socket_type s,
1335
- buf* bufs, size_t count, int in_flags, int& out_flags,
1336
- boost::system::error_code& ec, size_t& bytes_transferred)
1337
- {
1338
- for (;;)
1339
- {
1340
- // Read some data.
1341
- signed_size_type bytes = socket_ops::recvmsg(
1342
- s, bufs, count, in_flags, out_flags, ec);
1343
-
1344
- // Check if operation succeeded.
1345
- if (bytes >= 0)
1346
- {
1347
- bytes_transferred = bytes;
1348
- return true;
1349
- }
1350
-
1351
- // Retry operation if interrupted by signal.
1352
- if (ec == boost::asio::error::interrupted)
1353
- continue;
1354
-
1355
- // Check if we need to run the operation again.
1356
- if (ec == boost::asio::error::would_block
1357
- || ec == boost::asio::error::try_again)
1358
- return false;
1359
-
1360
- // Operation failed.
1361
- bytes_transferred = 0;
1362
- return true;
1363
- }
1364
- }
1365
-
1366
- #endif // defined(BOOST_ASIO_HAS_IOCP)
1367
-
1368
- signed_size_type send(socket_type s, const buf* bufs, size_t count,
1369
- int flags, boost::system::error_code& ec)
1370
- {
1371
- #if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
1372
- // Send the data.
1373
- DWORD send_buf_count = static_cast<DWORD>(count);
1374
- DWORD bytes_transferred = 0;
1375
- DWORD send_flags = flags;
1376
- int result = ::WSASend(s, const_cast<buf*>(bufs),
1377
- send_buf_count, &bytes_transferred, send_flags, 0, 0);
1378
- get_last_error(ec, true);
1379
- if (ec.value() == ERROR_NETNAME_DELETED)
1380
- ec = boost::asio::error::connection_reset;
1381
- else if (ec.value() == ERROR_PORT_UNREACHABLE)
1382
- ec = boost::asio::error::connection_refused;
1383
- if (result != 0)
1384
- return socket_error_retval;
1385
- ec.assign(0, ec.category());
1386
- return bytes_transferred;
1387
- #else // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
1388
- msghdr msg = msghdr();
1389
- msg.msg_iov = const_cast<buf*>(bufs);
1390
- msg.msg_iovlen = static_cast<int>(count);
1391
- #if defined(BOOST_ASIO_HAS_MSG_NOSIGNAL)
1392
- flags |= MSG_NOSIGNAL;
1393
- #endif // defined(BOOST_ASIO_HAS_MSG_NOSIGNAL)
1394
- signed_size_type result = ::sendmsg(s, &msg, flags);
1395
- get_last_error(ec, result < 0);
1396
- return result;
1397
- #endif // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
1398
- }
1399
-
1400
- signed_size_type send1(socket_type s, const void* data, size_t size,
1401
- int flags, boost::system::error_code& ec)
1402
- {
1403
- #if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
1404
- // Send the data.
1405
- WSABUF buf;
1406
- buf.buf = const_cast<char*>(static_cast<const char*>(data));
1407
- buf.len = static_cast<ULONG>(size);
1408
- DWORD bytes_transferred = 0;
1409
- DWORD send_flags = flags;
1410
- int result = ::WSASend(s, &buf, 1,
1411
- &bytes_transferred, send_flags, 0, 0);
1412
- get_last_error(ec, true);
1413
- if (ec.value() == ERROR_NETNAME_DELETED)
1414
- ec = boost::asio::error::connection_reset;
1415
- else if (ec.value() == ERROR_PORT_UNREACHABLE)
1416
- ec = boost::asio::error::connection_refused;
1417
- if (result != 0)
1418
- return socket_error_retval;
1419
- ec.assign(0, ec.category());
1420
- return bytes_transferred;
1421
- #else // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
1422
- #if defined(BOOST_ASIO_HAS_MSG_NOSIGNAL)
1423
- flags |= MSG_NOSIGNAL;
1424
- #endif // defined(BOOST_ASIO_HAS_MSG_NOSIGNAL)
1425
- signed_size_type result = ::send(s,
1426
- static_cast<const char*>(data), size, flags);
1427
- get_last_error(ec, result < 0);
1428
- return result;
1429
- #endif // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
1430
- }
1431
-
1432
- size_t sync_send(socket_type s, state_type state, const buf* bufs,
1433
- size_t count, int flags, bool all_empty, boost::system::error_code& ec)
1434
- {
1435
- if (s == invalid_socket)
1436
- {
1437
- ec = boost::asio::error::bad_descriptor;
1438
- return 0;
1439
- }
1440
-
1441
- // A request to write 0 bytes to a stream is a no-op.
1442
- if (all_empty && (state & stream_oriented))
1443
- {
1444
- ec.assign(0, ec.category());
1445
- return 0;
1446
- }
1447
-
1448
- // Read some data.
1449
- for (;;)
1450
- {
1451
- // Try to complete the operation without blocking.
1452
- signed_size_type bytes = socket_ops::send(s, bufs, count, flags, ec);
1453
-
1454
- // Check if operation succeeded.
1455
- if (bytes >= 0)
1456
- return bytes;
1457
-
1458
- // Operation failed.
1459
- if ((state & user_set_non_blocking)
1460
- || (ec != boost::asio::error::would_block
1461
- && ec != boost::asio::error::try_again))
1462
- return 0;
1463
-
1464
- // Wait for socket to become ready.
1465
- if (socket_ops::poll_write(s, 0, -1, ec) < 0)
1466
- return 0;
1467
- }
1468
- }
1469
-
1470
- size_t sync_send1(socket_type s, state_type state, const void* data,
1471
- size_t size, int flags, boost::system::error_code& ec)
1472
- {
1473
- if (s == invalid_socket)
1474
- {
1475
- ec = boost::asio::error::bad_descriptor;
1476
- return 0;
1477
- }
1478
-
1479
- // A request to write 0 bytes to a stream is a no-op.
1480
- if (size == 0 && (state & stream_oriented))
1481
- {
1482
- ec.assign(0, ec.category());
1483
- return 0;
1484
- }
1485
-
1486
- // Read some data.
1487
- for (;;)
1488
- {
1489
- // Try to complete the operation without blocking.
1490
- signed_size_type bytes = socket_ops::send1(s, data, size, flags, ec);
1491
-
1492
- // Check if operation succeeded.
1493
- if (bytes >= 0)
1494
- return bytes;
1495
-
1496
- // Operation failed.
1497
- if ((state & user_set_non_blocking)
1498
- || (ec != boost::asio::error::would_block
1499
- && ec != boost::asio::error::try_again))
1500
- return 0;
1501
-
1502
- // Wait for socket to become ready.
1503
- if (socket_ops::poll_write(s, 0, -1, ec) < 0)
1504
- return 0;
1505
- }
1506
- }
1507
-
1508
- #if defined(BOOST_ASIO_HAS_IOCP)
1509
-
1510
- void complete_iocp_send(
1511
- const weak_cancel_token_type& cancel_token,
1512
- boost::system::error_code& ec)
1513
- {
1514
- // Map non-portable errors to their portable counterparts.
1515
- if (ec.value() == ERROR_NETNAME_DELETED)
1516
- {
1517
- if (cancel_token.expired())
1518
- ec = boost::asio::error::operation_aborted;
1519
- else
1520
- ec = boost::asio::error::connection_reset;
1521
- }
1522
- else if (ec.value() == ERROR_PORT_UNREACHABLE)
1523
- {
1524
- ec = boost::asio::error::connection_refused;
1525
- }
1526
- }
1527
-
1528
- #else // defined(BOOST_ASIO_HAS_IOCP)
1529
-
1530
- bool non_blocking_send(socket_type s,
1531
- const buf* bufs, size_t count, int flags,
1532
- boost::system::error_code& ec, size_t& bytes_transferred)
1533
- {
1534
- for (;;)
1535
- {
1536
- // Write some data.
1537
- signed_size_type bytes = socket_ops::send(s, bufs, count, flags, ec);
1538
-
1539
- // Check if operation succeeded.
1540
- if (bytes >= 0)
1541
- {
1542
- bytes_transferred = bytes;
1543
- return true;
1544
- }
1545
-
1546
- // Retry operation if interrupted by signal.
1547
- if (ec == boost::asio::error::interrupted)
1548
- continue;
1549
-
1550
- // Check if we need to run the operation again.
1551
- if (ec == boost::asio::error::would_block
1552
- || ec == boost::asio::error::try_again)
1553
- return false;
1554
-
1555
- // Operation failed.
1556
- bytes_transferred = 0;
1557
- return true;
1558
- }
1559
- }
1560
-
1561
- bool non_blocking_send1(socket_type s,
1562
- const void* data, size_t size, int flags,
1563
- boost::system::error_code& ec, size_t& bytes_transferred)
1564
- {
1565
- for (;;)
1566
- {
1567
- // Write some data.
1568
- signed_size_type bytes = socket_ops::send1(s, data, size, flags, ec);
1569
-
1570
- // Check if operation succeeded.
1571
- if (bytes >= 0)
1572
- {
1573
- bytes_transferred = bytes;
1574
- return true;
1575
- }
1576
-
1577
- // Retry operation if interrupted by signal.
1578
- if (ec == boost::asio::error::interrupted)
1579
- continue;
1580
-
1581
- // Check if we need to run the operation again.
1582
- if (ec == boost::asio::error::would_block
1583
- || ec == boost::asio::error::try_again)
1584
- return false;
1585
-
1586
- // Operation failed.
1587
- bytes_transferred = 0;
1588
- return true;
1589
- }
1590
- }
1591
-
1592
- #endif // defined(BOOST_ASIO_HAS_IOCP)
1593
-
1594
- signed_size_type sendto(socket_type s, const buf* bufs, size_t count,
1595
- int flags, const socket_addr_type* addr, std::size_t addrlen,
1596
- boost::system::error_code& ec)
1597
- {
1598
- #if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
1599
- // Send the data.
1600
- DWORD send_buf_count = static_cast<DWORD>(count);
1601
- DWORD bytes_transferred = 0;
1602
- int result = ::WSASendTo(s, const_cast<buf*>(bufs),
1603
- send_buf_count, &bytes_transferred, flags, addr,
1604
- static_cast<int>(addrlen), 0, 0);
1605
- get_last_error(ec, true);
1606
- if (ec.value() == ERROR_NETNAME_DELETED)
1607
- ec = boost::asio::error::connection_reset;
1608
- else if (ec.value() == ERROR_PORT_UNREACHABLE)
1609
- ec = boost::asio::error::connection_refused;
1610
- if (result != 0)
1611
- return socket_error_retval;
1612
- ec.assign(0, ec.category());
1613
- return bytes_transferred;
1614
- #else // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
1615
- msghdr msg = msghdr();
1616
- init_msghdr_msg_name(msg.msg_name, addr);
1617
- msg.msg_namelen = static_cast<int>(addrlen);
1618
- msg.msg_iov = const_cast<buf*>(bufs);
1619
- msg.msg_iovlen = static_cast<int>(count);
1620
- #if defined(BOOST_ASIO_HAS_MSG_NOSIGNAL)
1621
- flags |= MSG_NOSIGNAL;
1622
- #endif // defined(BOOST_ASIO_HAS_MSG_NOSIGNAL)
1623
- signed_size_type result = ::sendmsg(s, &msg, flags);
1624
- get_last_error(ec, result < 0);
1625
- return result;
1626
- #endif // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
1627
- }
1628
-
1629
- template <typename SockLenType>
1630
- inline signed_size_type call_sendto(SockLenType msghdr::*,
1631
- socket_type s, const void* data, size_t size, int flags,
1632
- const socket_addr_type* addr, std::size_t addrlen)
1633
- {
1634
- return ::sendto(s, static_cast<char*>(const_cast<void*>(data)),
1635
- size, flags, addr, (SockLenType)addrlen);
1636
- }
1637
-
1638
- signed_size_type sendto1(socket_type s, const void* data, size_t size,
1639
- int flags, const socket_addr_type* addr, std::size_t addrlen,
1640
- boost::system::error_code& ec)
1641
- {
1642
- #if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
1643
- // Send the data.
1644
- WSABUF buf;
1645
- buf.buf = const_cast<char*>(static_cast<const char*>(data));
1646
- buf.len = static_cast<ULONG>(size);
1647
- DWORD bytes_transferred = 0;
1648
- int result = ::WSASendTo(s, &buf, 1, &bytes_transferred,
1649
- flags, addr, static_cast<int>(addrlen), 0, 0);
1650
- get_last_error(ec, true);
1651
- if (ec.value() == ERROR_NETNAME_DELETED)
1652
- ec = boost::asio::error::connection_reset;
1653
- else if (ec.value() == ERROR_PORT_UNREACHABLE)
1654
- ec = boost::asio::error::connection_refused;
1655
- if (result != 0)
1656
- return socket_error_retval;
1657
- ec.assign(0, ec.category());
1658
- return bytes_transferred;
1659
- #else // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
1660
- #if defined(BOOST_ASIO_HAS_MSG_NOSIGNAL)
1661
- flags |= MSG_NOSIGNAL;
1662
- #endif // defined(BOOST_ASIO_HAS_MSG_NOSIGNAL)
1663
- signed_size_type result = call_sendto(&msghdr::msg_namelen,
1664
- s, data, size, flags, addr, addrlen);
1665
- get_last_error(ec, result < 0);
1666
- return result;
1667
- #endif // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
1668
- }
1669
-
1670
- size_t sync_sendto(socket_type s, state_type state, const buf* bufs,
1671
- size_t count, int flags, const socket_addr_type* addr,
1672
- std::size_t addrlen, boost::system::error_code& ec)
1673
- {
1674
- if (s == invalid_socket)
1675
- {
1676
- ec = boost::asio::error::bad_descriptor;
1677
- return 0;
1678
- }
1679
-
1680
- // Write some data.
1681
- for (;;)
1682
- {
1683
- // Try to complete the operation without blocking.
1684
- signed_size_type bytes = socket_ops::sendto(
1685
- s, bufs, count, flags, addr, addrlen, ec);
1686
-
1687
- // Check if operation succeeded.
1688
- if (bytes >= 0)
1689
- return bytes;
1690
-
1691
- // Operation failed.
1692
- if ((state & user_set_non_blocking)
1693
- || (ec != boost::asio::error::would_block
1694
- && ec != boost::asio::error::try_again))
1695
- return 0;
1696
-
1697
- // Wait for socket to become ready.
1698
- if (socket_ops::poll_write(s, 0, -1, ec) < 0)
1699
- return 0;
1700
- }
1701
- }
1702
-
1703
- size_t sync_sendto1(socket_type s, state_type state, const void* data,
1704
- size_t size, int flags, const socket_addr_type* addr,
1705
- std::size_t addrlen, boost::system::error_code& ec)
1706
- {
1707
- if (s == invalid_socket)
1708
- {
1709
- ec = boost::asio::error::bad_descriptor;
1710
- return 0;
1711
- }
1712
-
1713
- // Write some data.
1714
- for (;;)
1715
- {
1716
- // Try to complete the operation without blocking.
1717
- signed_size_type bytes = socket_ops::sendto1(
1718
- s, data, size, flags, addr, addrlen, ec);
1719
-
1720
- // Check if operation succeeded.
1721
- if (bytes >= 0)
1722
- return bytes;
1723
-
1724
- // Operation failed.
1725
- if ((state & user_set_non_blocking)
1726
- || (ec != boost::asio::error::would_block
1727
- && ec != boost::asio::error::try_again))
1728
- return 0;
1729
-
1730
- // Wait for socket to become ready.
1731
- if (socket_ops::poll_write(s, 0, -1, ec) < 0)
1732
- return 0;
1733
- }
1734
- }
1735
-
1736
- #if !defined(BOOST_ASIO_HAS_IOCP)
1737
-
1738
- bool non_blocking_sendto(socket_type s,
1739
- const buf* bufs, size_t count, int flags,
1740
- const socket_addr_type* addr, std::size_t addrlen,
1741
- boost::system::error_code& ec, size_t& bytes_transferred)
1742
- {
1743
- for (;;)
1744
- {
1745
- // Write some data.
1746
- signed_size_type bytes = socket_ops::sendto(
1747
- s, bufs, count, flags, addr, addrlen, ec);
1748
-
1749
- // Check if operation succeeded.
1750
- if (bytes >= 0)
1751
- {
1752
- bytes_transferred = bytes;
1753
- return true;
1754
- }
1755
-
1756
- // Retry operation if interrupted by signal.
1757
- if (ec == boost::asio::error::interrupted)
1758
- continue;
1759
-
1760
- // Check if we need to run the operation again.
1761
- if (ec == boost::asio::error::would_block
1762
- || ec == boost::asio::error::try_again)
1763
- return false;
1764
-
1765
- // Operation failed.
1766
- bytes_transferred = 0;
1767
- return true;
1768
- }
1769
- }
1770
-
1771
- bool non_blocking_sendto1(socket_type s,
1772
- const void* data, size_t size, int flags,
1773
- const socket_addr_type* addr, std::size_t addrlen,
1774
- boost::system::error_code& ec, size_t& bytes_transferred)
1775
- {
1776
- for (;;)
1777
- {
1778
- // Write some data.
1779
- signed_size_type bytes = socket_ops::sendto1(
1780
- s, data, size, flags, addr, addrlen, ec);
1781
-
1782
- // Check if operation succeeded.
1783
- if (bytes >= 0)
1784
- {
1785
- bytes_transferred = bytes;
1786
- return true;
1787
- }
1788
-
1789
- // Retry operation if interrupted by signal.
1790
- if (ec == boost::asio::error::interrupted)
1791
- continue;
1792
-
1793
- // Check if we need to run the operation again.
1794
- if (ec == boost::asio::error::would_block
1795
- || ec == boost::asio::error::try_again)
1796
- return false;
1797
-
1798
- // Operation failed.
1799
- bytes_transferred = 0;
1800
- return true;
1801
- }
1802
- }
1803
-
1804
- #endif // !defined(BOOST_ASIO_HAS_IOCP)
1805
-
1806
- socket_type socket(int af, int type, int protocol,
1807
- boost::system::error_code& ec)
1808
- {
1809
- #if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
1810
- socket_type s = ::WSASocketW(af, type, protocol, 0, 0, WSA_FLAG_OVERLAPPED);
1811
- get_last_error(ec, s == invalid_socket);
1812
- if (s == invalid_socket)
1813
- return s;
1814
-
1815
- if (af == BOOST_ASIO_OS_DEF(AF_INET6))
1816
- {
1817
- // Try to enable the POSIX default behaviour of having IPV6_V6ONLY set to
1818
- // false. This will only succeed on Windows Vista and later versions of
1819
- // Windows, where a dual-stack IPv4/v6 implementation is available.
1820
- DWORD optval = 0;
1821
- ::setsockopt(s, IPPROTO_IPV6, IPV6_V6ONLY,
1822
- reinterpret_cast<const char*>(&optval), sizeof(optval));
1823
- }
1824
-
1825
- return s;
1826
- #elif defined(__MACH__) && defined(__APPLE__) || defined(__FreeBSD__)
1827
- socket_type s = ::socket(af, type, protocol);
1828
- get_last_error(ec, s == invalid_socket);
1829
- if (s == invalid_socket)
1830
- return s;
1831
-
1832
- int optval = 1;
1833
- int result = ::setsockopt(s, SOL_SOCKET,
1834
- SO_NOSIGPIPE, &optval, sizeof(optval));
1835
- get_last_error(ec, result != 0);
1836
- if (result != 0)
1837
- {
1838
- ::close(s);
1839
- return invalid_socket;
1840
- }
1841
-
1842
- return s;
1843
- #else
1844
- int s = ::socket(af, type, protocol);
1845
- get_last_error(ec, s < 0);
1846
- return s;
1847
- #endif
1848
- }
1849
-
1850
- template <typename SockLenType>
1851
- inline int call_setsockopt(SockLenType msghdr::*,
1852
- socket_type s, int level, int optname,
1853
- const void* optval, std::size_t optlen)
1854
- {
1855
- return ::setsockopt(s, level, optname,
1856
- (const char*)optval, (SockLenType)optlen);
1857
- }
1858
-
1859
- int setsockopt(socket_type s, state_type& state, int level, int optname,
1860
- const void* optval, std::size_t optlen, boost::system::error_code& ec)
1861
- {
1862
- if (s == invalid_socket)
1863
- {
1864
- ec = boost::asio::error::bad_descriptor;
1865
- return socket_error_retval;
1866
- }
1867
-
1868
- if (level == custom_socket_option_level && optname == always_fail_option)
1869
- {
1870
- ec = boost::asio::error::invalid_argument;
1871
- return socket_error_retval;
1872
- }
1873
-
1874
- if (level == custom_socket_option_level
1875
- && optname == enable_connection_aborted_option)
1876
- {
1877
- if (optlen != sizeof(int))
1878
- {
1879
- ec = boost::asio::error::invalid_argument;
1880
- return socket_error_retval;
1881
- }
1882
-
1883
- if (*static_cast<const int*>(optval))
1884
- state |= enable_connection_aborted;
1885
- else
1886
- state &= ~enable_connection_aborted;
1887
- ec.assign(0, ec.category());
1888
- return 0;
1889
- }
1890
-
1891
- if (level == SOL_SOCKET && optname == SO_LINGER)
1892
- state |= user_set_linger;
1893
-
1894
- #if defined(__BORLANDC__)
1895
- // Mysteriously, using the getsockopt and setsockopt functions directly with
1896
- // Borland C++ results in incorrect values being set and read. The bug can be
1897
- // worked around by using function addresses resolved with GetProcAddress.
1898
- if (HMODULE winsock_module = ::GetModuleHandleA("ws2_32"))
1899
- {
1900
- typedef int (WSAAPI *sso_t)(SOCKET, int, int, const char*, int);
1901
- if (sso_t sso = (sso_t)::GetProcAddress(winsock_module, "setsockopt"))
1902
- {
1903
- int result = sso(s, level, optname,
1904
- reinterpret_cast<const char*>(optval),
1905
- static_cast<int>(optlen));
1906
- get_last_error(ec, result != 0);
1907
- return result;
1908
- }
1909
- }
1910
- ec = boost::asio::error::fault;
1911
- return socket_error_retval;
1912
- #else // defined(__BORLANDC__)
1913
- int result = call_setsockopt(&msghdr::msg_namelen,
1914
- s, level, optname, optval, optlen);
1915
- get_last_error(ec, result != 0);
1916
- if (result == 0)
1917
- {
1918
- #if defined(__MACH__) && defined(__APPLE__) \
1919
- || defined(__NetBSD__) || defined(__FreeBSD__) \
1920
- || defined(__OpenBSD__) || defined(__QNX__)
1921
- // To implement portable behaviour for SO_REUSEADDR with UDP sockets we
1922
- // need to also set SO_REUSEPORT on BSD-based platforms.
1923
- if ((state & datagram_oriented)
1924
- && level == SOL_SOCKET && optname == SO_REUSEADDR)
1925
- {
1926
- call_setsockopt(&msghdr::msg_namelen, s,
1927
- SOL_SOCKET, SO_REUSEPORT, optval, optlen);
1928
- }
1929
- #endif
1930
- }
1931
-
1932
- return result;
1933
- #endif // defined(__BORLANDC__)
1934
- }
1935
-
1936
- template <typename SockLenType>
1937
- inline int call_getsockopt(SockLenType msghdr::*,
1938
- socket_type s, int level, int optname,
1939
- void* optval, std::size_t* optlen)
1940
- {
1941
- SockLenType tmp_optlen = (SockLenType)*optlen;
1942
- int result = ::getsockopt(s, level, optname, (char*)optval, &tmp_optlen);
1943
- *optlen = (std::size_t)tmp_optlen;
1944
- return result;
1945
- }
1946
-
1947
- int getsockopt(socket_type s, state_type state, int level, int optname,
1948
- void* optval, size_t* optlen, boost::system::error_code& ec)
1949
- {
1950
- if (s == invalid_socket)
1951
- {
1952
- ec = boost::asio::error::bad_descriptor;
1953
- return socket_error_retval;
1954
- }
1955
-
1956
- if (level == custom_socket_option_level && optname == always_fail_option)
1957
- {
1958
- ec = boost::asio::error::invalid_argument;
1959
- return socket_error_retval;
1960
- }
1961
-
1962
- if (level == custom_socket_option_level
1963
- && optname == enable_connection_aborted_option)
1964
- {
1965
- if (*optlen != sizeof(int))
1966
- {
1967
- ec = boost::asio::error::invalid_argument;
1968
- return socket_error_retval;
1969
- }
1970
-
1971
- *static_cast<int*>(optval) = (state & enable_connection_aborted) ? 1 : 0;
1972
- ec.assign(0, ec.category());
1973
- return 0;
1974
- }
1975
-
1976
- #if defined(__BORLANDC__)
1977
- // Mysteriously, using the getsockopt and setsockopt functions directly with
1978
- // Borland C++ results in incorrect values being set and read. The bug can be
1979
- // worked around by using function addresses resolved with GetProcAddress.
1980
- if (HMODULE winsock_module = ::GetModuleHandleA("ws2_32"))
1981
- {
1982
- typedef int (WSAAPI *gso_t)(SOCKET, int, int, char*, int*);
1983
- if (gso_t gso = (gso_t)::GetProcAddress(winsock_module, "getsockopt"))
1984
- {
1985
- int tmp_optlen = static_cast<int>(*optlen);
1986
- int result = gso(s, level, optname,
1987
- reinterpret_cast<char*>(optval), &tmp_optlen);
1988
- get_last_error(ec, result != 0);
1989
- *optlen = static_cast<size_t>(tmp_optlen);
1990
- if (result != 0 && level == IPPROTO_IPV6 && optname == IPV6_V6ONLY
1991
- && ec.value() == WSAENOPROTOOPT && *optlen == sizeof(DWORD))
1992
- {
1993
- // Dual-stack IPv4/v6 sockets, and the IPV6_V6ONLY socket option, are
1994
- // only supported on Windows Vista and later. To simplify program logic
1995
- // we will fake success of getting this option and specify that the
1996
- // value is non-zero (i.e. true). This corresponds to the behavior of
1997
- // IPv6 sockets on Windows platforms pre-Vista.
1998
- *static_cast<DWORD*>(optval) = 1;
1999
- ec.assign(0, ec.category());
2000
- }
2001
- return result;
2002
- }
2003
- }
2004
- ec = boost::asio::error::fault;
2005
- return socket_error_retval;
2006
- #elif defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
2007
- int result = call_getsockopt(&msghdr::msg_namelen,
2008
- s, level, optname, optval, optlen);
2009
- get_last_error(ec, result != 0);
2010
- if (result != 0 && level == IPPROTO_IPV6 && optname == IPV6_V6ONLY
2011
- && ec.value() == WSAENOPROTOOPT && *optlen == sizeof(DWORD))
2012
- {
2013
- // Dual-stack IPv4/v6 sockets, and the IPV6_V6ONLY socket option, are only
2014
- // supported on Windows Vista and later. To simplify program logic we will
2015
- // fake success of getting this option and specify that the value is
2016
- // non-zero (i.e. true). This corresponds to the behavior of IPv6 sockets
2017
- // on Windows platforms pre-Vista.
2018
- *static_cast<DWORD*>(optval) = 1;
2019
- ec.assign(0, ec.category());
2020
- }
2021
- return result;
2022
- #else // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
2023
- int result = call_getsockopt(&msghdr::msg_namelen,
2024
- s, level, optname, optval, optlen);
2025
- get_last_error(ec, result != 0);
2026
- #if defined(__linux__)
2027
- if (result == 0 && level == SOL_SOCKET && *optlen == sizeof(int)
2028
- && (optname == SO_SNDBUF || optname == SO_RCVBUF))
2029
- {
2030
- // On Linux, setting SO_SNDBUF or SO_RCVBUF to N actually causes the kernel
2031
- // to set the buffer size to N*2. Linux puts additional stuff into the
2032
- // buffers so that only about half is actually available to the application.
2033
- // The retrieved value is divided by 2 here to make it appear as though the
2034
- // correct value has been set.
2035
- *static_cast<int*>(optval) /= 2;
2036
- }
2037
- #endif // defined(__linux__)
2038
- return result;
2039
- #endif // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
2040
- }
2041
-
2042
- template <typename SockLenType>
2043
- inline int call_getpeername(SockLenType msghdr::*,
2044
- socket_type s, socket_addr_type* addr, std::size_t* addrlen)
2045
- {
2046
- SockLenType tmp_addrlen = (SockLenType)*addrlen;
2047
- int result = ::getpeername(s, addr, &tmp_addrlen);
2048
- *addrlen = (std::size_t)tmp_addrlen;
2049
- return result;
2050
- }
2051
-
2052
- int getpeername(socket_type s, socket_addr_type* addr,
2053
- std::size_t* addrlen, bool cached, boost::system::error_code& ec)
2054
- {
2055
- if (s == invalid_socket)
2056
- {
2057
- ec = boost::asio::error::bad_descriptor;
2058
- return socket_error_retval;
2059
- }
2060
-
2061
- #if defined(BOOST_ASIO_WINDOWS) && !defined(BOOST_ASIO_WINDOWS_APP) \
2062
- || defined(__CYGWIN__)
2063
- if (cached)
2064
- {
2065
- // Check if socket is still connected.
2066
- DWORD connect_time = 0;
2067
- size_t connect_time_len = sizeof(connect_time);
2068
- if (socket_ops::getsockopt(s, 0, SOL_SOCKET, SO_CONNECT_TIME,
2069
- &connect_time, &connect_time_len, ec) == socket_error_retval)
2070
- {
2071
- return socket_error_retval;
2072
- }
2073
- if (connect_time == 0xFFFFFFFF)
2074
- {
2075
- ec = boost::asio::error::not_connected;
2076
- return socket_error_retval;
2077
- }
2078
-
2079
- // The cached value is still valid.
2080
- ec.assign(0, ec.category());
2081
- return 0;
2082
- }
2083
- #else // defined(BOOST_ASIO_WINDOWS) && !defined(BOOST_ASIO_WINDOWS_APP)
2084
- // || defined(__CYGWIN__)
2085
- (void)cached;
2086
- #endif // defined(BOOST_ASIO_WINDOWS) && !defined(BOOST_ASIO_WINDOWS_APP)
2087
- // || defined(__CYGWIN__)
2088
-
2089
- int result = call_getpeername(&msghdr::msg_namelen, s, addr, addrlen);
2090
- get_last_error(ec, result != 0);
2091
- return result;
2092
- }
2093
-
2094
- template <typename SockLenType>
2095
- inline int call_getsockname(SockLenType msghdr::*,
2096
- socket_type s, socket_addr_type* addr, std::size_t* addrlen)
2097
- {
2098
- SockLenType tmp_addrlen = (SockLenType)*addrlen;
2099
- int result = ::getsockname(s, addr, &tmp_addrlen);
2100
- *addrlen = (std::size_t)tmp_addrlen;
2101
- return result;
2102
- }
2103
-
2104
- int getsockname(socket_type s, socket_addr_type* addr,
2105
- std::size_t* addrlen, boost::system::error_code& ec)
2106
- {
2107
- if (s == invalid_socket)
2108
- {
2109
- ec = boost::asio::error::bad_descriptor;
2110
- return socket_error_retval;
2111
- }
2112
-
2113
- int result = call_getsockname(&msghdr::msg_namelen, s, addr, addrlen);
2114
- get_last_error(ec, result != 0);
2115
- return result;
2116
- }
2117
-
2118
- int ioctl(socket_type s, state_type& state, int cmd,
2119
- ioctl_arg_type* arg, boost::system::error_code& ec)
2120
- {
2121
- if (s == invalid_socket)
2122
- {
2123
- ec = boost::asio::error::bad_descriptor;
2124
- return socket_error_retval;
2125
- }
2126
-
2127
- #if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
2128
- int result = ::ioctlsocket(s, cmd, arg);
2129
- #elif defined(__MACH__) && defined(__APPLE__) \
2130
- || defined(__NetBSD__) || defined(__FreeBSD__) || defined(__OpenBSD__)
2131
- int result = ::ioctl(s, static_cast<unsigned int>(cmd), arg);
2132
- #else
2133
- int result = ::ioctl(s, cmd, arg);
2134
- #endif
2135
- get_last_error(ec, result < 0);
2136
- if (result >= 0)
2137
- {
2138
- // When updating the non-blocking mode we always perform the ioctl syscall,
2139
- // even if the flags would otherwise indicate that the socket is already in
2140
- // the correct state. This ensures that the underlying socket is put into
2141
- // the state that has been requested by the user. If the ioctl syscall was
2142
- // successful then we need to update the flags to match.
2143
- if (cmd == static_cast<int>(FIONBIO))
2144
- {
2145
- if (*arg)
2146
- {
2147
- state |= user_set_non_blocking;
2148
- }
2149
- else
2150
- {
2151
- // Clearing the non-blocking mode always overrides any internally-set
2152
- // non-blocking flag. Any subsequent asynchronous operations will need
2153
- // to re-enable non-blocking I/O.
2154
- state &= ~(user_set_non_blocking | internal_non_blocking);
2155
- }
2156
- }
2157
- }
2158
-
2159
- return result;
2160
- }
2161
-
2162
- int select(int nfds, fd_set* readfds, fd_set* writefds,
2163
- fd_set* exceptfds, timeval* timeout, boost::system::error_code& ec)
2164
- {
2165
- #if defined(__EMSCRIPTEN__)
2166
- exceptfds = 0;
2167
- #endif // defined(__EMSCRIPTEN__)
2168
- #if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
2169
- if (!readfds && !writefds && !exceptfds && timeout)
2170
- {
2171
- DWORD milliseconds = timeout->tv_sec * 1000 + timeout->tv_usec / 1000;
2172
- if (milliseconds == 0)
2173
- milliseconds = 1; // Force context switch.
2174
- ::Sleep(milliseconds);
2175
- ec.assign(0, ec.category());
2176
- return 0;
2177
- }
2178
-
2179
- // The select() call allows timeout values measured in microseconds, but the
2180
- // system clock (as wrapped by boost::posix_time::microsec_clock) typically
2181
- // has a resolution of 10 milliseconds. This can lead to a spinning select
2182
- // reactor, meaning increased CPU usage, when waiting for the earliest
2183
- // scheduled timeout if it's less than 10 milliseconds away. To avoid a tight
2184
- // spin we'll use a minimum timeout of 1 millisecond.
2185
- if (timeout && timeout->tv_sec == 0
2186
- && timeout->tv_usec > 0 && timeout->tv_usec < 1000)
2187
- timeout->tv_usec = 1000;
2188
- #endif // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
2189
-
2190
- #if defined(__hpux) && defined(__SELECT)
2191
- timespec ts;
2192
- ts.tv_sec = timeout ? timeout->tv_sec : 0;
2193
- ts.tv_nsec = timeout ? timeout->tv_usec * 1000 : 0;
2194
- int result = ::pselect(nfds, readfds,
2195
- writefds, exceptfds, timeout ? &ts : 0, 0);
2196
- #else
2197
- int result = ::select(nfds, readfds, writefds, exceptfds, timeout);
2198
- #endif
2199
- get_last_error(ec, result < 0);
2200
- return result;
2201
- }
2202
-
2203
- int poll_read(socket_type s, state_type state,
2204
- int msec, boost::system::error_code& ec)
2205
- {
2206
- if (s == invalid_socket)
2207
- {
2208
- ec = boost::asio::error::bad_descriptor;
2209
- return socket_error_retval;
2210
- }
2211
-
2212
- #if defined(BOOST_ASIO_WINDOWS) \
2213
- || defined(__CYGWIN__) \
2214
- || defined(__SYMBIAN32__)
2215
- fd_set fds;
2216
- FD_ZERO(&fds);
2217
- FD_SET(s, &fds);
2218
- timeval timeout_obj;
2219
- timeval* timeout;
2220
- if (state & user_set_non_blocking)
2221
- {
2222
- timeout_obj.tv_sec = 0;
2223
- timeout_obj.tv_usec = 0;
2224
- timeout = &timeout_obj;
2225
- }
2226
- else if (msec >= 0)
2227
- {
2228
- timeout_obj.tv_sec = msec / 1000;
2229
- timeout_obj.tv_usec = (msec % 1000) * 1000;
2230
- timeout = &timeout_obj;
2231
- }
2232
- else
2233
- timeout = 0;
2234
- int result = ::select(s + 1, &fds, 0, 0, timeout);
2235
- get_last_error(ec, result < 0);
2236
- #else // defined(BOOST_ASIO_WINDOWS)
2237
- // || defined(__CYGWIN__)
2238
- // || defined(__SYMBIAN32__)
2239
- pollfd fds;
2240
- fds.fd = s;
2241
- fds.events = POLLIN;
2242
- fds.revents = 0;
2243
- int timeout = (state & user_set_non_blocking) ? 0 : msec;
2244
- int result = ::poll(&fds, 1, timeout);
2245
- get_last_error(ec, result < 0);
2246
- #endif // defined(BOOST_ASIO_WINDOWS)
2247
- // || defined(__CYGWIN__)
2248
- // || defined(__SYMBIAN32__)
2249
- if (result == 0)
2250
- if (state & user_set_non_blocking)
2251
- ec = boost::asio::error::would_block;
2252
- return result;
2253
- }
2254
-
2255
- int poll_write(socket_type s, state_type state,
2256
- int msec, boost::system::error_code& ec)
2257
- {
2258
- if (s == invalid_socket)
2259
- {
2260
- ec = boost::asio::error::bad_descriptor;
2261
- return socket_error_retval;
2262
- }
2263
-
2264
- #if defined(BOOST_ASIO_WINDOWS) \
2265
- || defined(__CYGWIN__) \
2266
- || defined(__SYMBIAN32__)
2267
- fd_set fds;
2268
- FD_ZERO(&fds);
2269
- FD_SET(s, &fds);
2270
- timeval timeout_obj;
2271
- timeval* timeout;
2272
- if (state & user_set_non_blocking)
2273
- {
2274
- timeout_obj.tv_sec = 0;
2275
- timeout_obj.tv_usec = 0;
2276
- timeout = &timeout_obj;
2277
- }
2278
- else if (msec >= 0)
2279
- {
2280
- timeout_obj.tv_sec = msec / 1000;
2281
- timeout_obj.tv_usec = (msec % 1000) * 1000;
2282
- timeout = &timeout_obj;
2283
- }
2284
- else
2285
- timeout = 0;
2286
- int result = ::select(s + 1, 0, &fds, 0, timeout);
2287
- get_last_error(ec, result < 0);
2288
- #else // defined(BOOST_ASIO_WINDOWS)
2289
- // || defined(__CYGWIN__)
2290
- // || defined(__SYMBIAN32__)
2291
- pollfd fds;
2292
- fds.fd = s;
2293
- fds.events = POLLOUT;
2294
- fds.revents = 0;
2295
- int timeout = (state & user_set_non_blocking) ? 0 : msec;
2296
- int result = ::poll(&fds, 1, timeout);
2297
- get_last_error(ec, result < 0);
2298
- #endif // defined(BOOST_ASIO_WINDOWS)
2299
- // || defined(__CYGWIN__)
2300
- // || defined(__SYMBIAN32__)
2301
- if (result == 0)
2302
- if (state & user_set_non_blocking)
2303
- ec = boost::asio::error::would_block;
2304
- return result;
2305
- }
2306
-
2307
- int poll_error(socket_type s, state_type state,
2308
- int msec, boost::system::error_code& ec)
2309
- {
2310
- if (s == invalid_socket)
2311
- {
2312
- ec = boost::asio::error::bad_descriptor;
2313
- return socket_error_retval;
2314
- }
2315
-
2316
- #if defined(BOOST_ASIO_WINDOWS) \
2317
- || defined(__CYGWIN__) \
2318
- || defined(__SYMBIAN32__)
2319
- fd_set fds;
2320
- FD_ZERO(&fds);
2321
- FD_SET(s, &fds);
2322
- timeval timeout_obj;
2323
- timeval* timeout;
2324
- if (state & user_set_non_blocking)
2325
- {
2326
- timeout_obj.tv_sec = 0;
2327
- timeout_obj.tv_usec = 0;
2328
- timeout = &timeout_obj;
2329
- }
2330
- else if (msec >= 0)
2331
- {
2332
- timeout_obj.tv_sec = msec / 1000;
2333
- timeout_obj.tv_usec = (msec % 1000) * 1000;
2334
- timeout = &timeout_obj;
2335
- }
2336
- else
2337
- timeout = 0;
2338
- int result = ::select(s + 1, 0, 0, &fds, timeout);
2339
- get_last_error(ec, result < 0);
2340
- #else // defined(BOOST_ASIO_WINDOWS)
2341
- // || defined(__CYGWIN__)
2342
- // || defined(__SYMBIAN32__)
2343
- pollfd fds;
2344
- fds.fd = s;
2345
- fds.events = POLLPRI | POLLERR | POLLHUP;
2346
- fds.revents = 0;
2347
- int timeout = (state & user_set_non_blocking) ? 0 : msec;
2348
- int result = ::poll(&fds, 1, timeout);
2349
- get_last_error(ec, result < 0);
2350
- #endif // defined(BOOST_ASIO_WINDOWS)
2351
- // || defined(__CYGWIN__)
2352
- // || defined(__SYMBIAN32__)
2353
- if (result == 0)
2354
- if (state & user_set_non_blocking)
2355
- ec = boost::asio::error::would_block;
2356
- return result;
2357
- }
2358
-
2359
- int poll_connect(socket_type s, int msec, boost::system::error_code& ec)
2360
- {
2361
- if (s == invalid_socket)
2362
- {
2363
- ec = boost::asio::error::bad_descriptor;
2364
- return socket_error_retval;
2365
- }
2366
-
2367
- #if defined(BOOST_ASIO_WINDOWS) \
2368
- || defined(__CYGWIN__) \
2369
- || defined(__SYMBIAN32__)
2370
- fd_set write_fds;
2371
- FD_ZERO(&write_fds);
2372
- FD_SET(s, &write_fds);
2373
- fd_set except_fds;
2374
- FD_ZERO(&except_fds);
2375
- FD_SET(s, &except_fds);
2376
- timeval timeout_obj;
2377
- timeval* timeout;
2378
- if (msec >= 0)
2379
- {
2380
- timeout_obj.tv_sec = msec / 1000;
2381
- timeout_obj.tv_usec = (msec % 1000) * 1000;
2382
- timeout = &timeout_obj;
2383
- }
2384
- else
2385
- timeout = 0;
2386
- int result = ::select(s + 1, 0, &write_fds, &except_fds, timeout);
2387
- get_last_error(ec, result < 0);
2388
- return result;
2389
- #else // defined(BOOST_ASIO_WINDOWS)
2390
- // || defined(__CYGWIN__)
2391
- // || defined(__SYMBIAN32__)
2392
- pollfd fds;
2393
- fds.fd = s;
2394
- fds.events = POLLOUT;
2395
- fds.revents = 0;
2396
- int result = ::poll(&fds, 1, msec);
2397
- get_last_error(ec, result < 0);
2398
- return result;
2399
- #endif // defined(BOOST_ASIO_WINDOWS)
2400
- // || defined(__CYGWIN__)
2401
- // || defined(__SYMBIAN32__)
2402
- }
2403
-
2404
- #endif // !defined(BOOST_ASIO_WINDOWS_RUNTIME)
2405
-
2406
- const char* inet_ntop(int af, const void* src, char* dest, size_t length,
2407
- unsigned long scope_id, boost::system::error_code& ec)
2408
- {
2409
- clear_last_error();
2410
- #if defined(BOOST_ASIO_WINDOWS_RUNTIME)
2411
- using namespace std; // For sprintf.
2412
- const unsigned char* bytes = static_cast<const unsigned char*>(src);
2413
- if (af == BOOST_ASIO_OS_DEF(AF_INET))
2414
- {
2415
- sprintf_s(dest, length, "%u.%u.%u.%u",
2416
- bytes[0], bytes[1], bytes[2], bytes[3]);
2417
- return dest;
2418
- }
2419
- else if (af == BOOST_ASIO_OS_DEF(AF_INET6))
2420
- {
2421
- size_t n = 0, b = 0, z = 0;
2422
- while (n < length && b < 16)
2423
- {
2424
- if (bytes[b] == 0 && bytes[b + 1] == 0 && z == 0)
2425
- {
2426
- do b += 2; while (b < 16 && bytes[b] == 0 && bytes[b + 1] == 0);
2427
- n += sprintf_s(dest + n, length - n, ":%s", b < 16 ? "" : ":"), ++z;
2428
- }
2429
- else
2430
- {
2431
- n += sprintf_s(dest + n, length - n, "%s%x", b ? ":" : "",
2432
- (static_cast<u_long_type>(bytes[b]) << 8) | bytes[b + 1]);
2433
- b += 2;
2434
- }
2435
- }
2436
- if (scope_id)
2437
- n += sprintf_s(dest + n, length - n, "%%%lu", scope_id);
2438
- return dest;
2439
- }
2440
- else
2441
- {
2442
- ec = boost::asio::error::address_family_not_supported;
2443
- return 0;
2444
- }
2445
- #elif defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
2446
- using namespace std; // For memcpy.
2447
-
2448
- if (af != BOOST_ASIO_OS_DEF(AF_INET) && af != BOOST_ASIO_OS_DEF(AF_INET6))
2449
- {
2450
- ec = boost::asio::error::address_family_not_supported;
2451
- return 0;
2452
- }
2453
-
2454
- union
2455
- {
2456
- socket_addr_type base;
2457
- sockaddr_storage_type storage;
2458
- sockaddr_in4_type v4;
2459
- sockaddr_in6_type v6;
2460
- } address;
2461
- DWORD address_length;
2462
- if (af == BOOST_ASIO_OS_DEF(AF_INET))
2463
- {
2464
- address_length = sizeof(sockaddr_in4_type);
2465
- address.v4.sin_family = BOOST_ASIO_OS_DEF(AF_INET);
2466
- address.v4.sin_port = 0;
2467
- memcpy(&address.v4.sin_addr, src, sizeof(in4_addr_type));
2468
- }
2469
- else // AF_INET6
2470
- {
2471
- address_length = sizeof(sockaddr_in6_type);
2472
- address.v6.sin6_family = BOOST_ASIO_OS_DEF(AF_INET6);
2473
- address.v6.sin6_port = 0;
2474
- address.v6.sin6_flowinfo = 0;
2475
- address.v6.sin6_scope_id = scope_id;
2476
- memcpy(&address.v6.sin6_addr, src, sizeof(in6_addr_type));
2477
- }
2478
-
2479
- DWORD string_length = static_cast<DWORD>(length);
2480
- #if defined(BOOST_NO_ANSI_APIS) || (defined(_MSC_VER) && (_MSC_VER >= 1800))
2481
- LPWSTR string_buffer = (LPWSTR)_alloca(length * sizeof(WCHAR));
2482
- int result = ::WSAAddressToStringW(&address.base,
2483
- address_length, 0, string_buffer, &string_length);
2484
- get_last_error(ec, true);
2485
- ::WideCharToMultiByte(CP_ACP, 0, string_buffer, -1,
2486
- dest, static_cast<int>(length), 0, 0);
2487
- #else
2488
- int result = ::WSAAddressToStringA(&address.base,
2489
- address_length, 0, dest, &string_length);
2490
- get_last_error(ec, true);
2491
- #endif
2492
-
2493
- // Windows may set error code on success.
2494
- if (result != socket_error_retval)
2495
- ec.assign(0, ec.category());
2496
-
2497
- // Windows may not set an error code on failure.
2498
- else if (result == socket_error_retval && !ec)
2499
- ec = boost::asio::error::invalid_argument;
2500
-
2501
- return result == socket_error_retval ? 0 : dest;
2502
- #else // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
2503
- const char* result = ::inet_ntop(af, src, dest, static_cast<int>(length));
2504
- get_last_error(ec, true);
2505
- if (result == 0 && !ec)
2506
- ec = boost::asio::error::invalid_argument;
2507
- if (result != 0 && af == BOOST_ASIO_OS_DEF(AF_INET6) && scope_id != 0)
2508
- {
2509
- using namespace std; // For strcat and sprintf.
2510
- char if_name[(IF_NAMESIZE > 21 ? IF_NAMESIZE : 21) + 1] = "%";
2511
- const in6_addr_type* ipv6_address = static_cast<const in6_addr_type*>(src);
2512
- bool is_link_local = ((ipv6_address->s6_addr[0] == 0xfe)
2513
- && ((ipv6_address->s6_addr[1] & 0xc0) == 0x80));
2514
- bool is_multicast_link_local = ((ipv6_address->s6_addr[0] == 0xff)
2515
- && ((ipv6_address->s6_addr[1] & 0x0f) == 0x02));
2516
- if ((!is_link_local && !is_multicast_link_local)
2517
- || if_indextoname(static_cast<unsigned>(scope_id), if_name + 1) == 0)
2518
- sprintf(if_name + 1, "%lu", scope_id);
2519
- strcat(dest, if_name);
2520
- }
2521
- return result;
2522
- #endif // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
2523
- }
2524
-
2525
- int inet_pton(int af, const char* src, void* dest,
2526
- unsigned long* scope_id, boost::system::error_code& ec)
2527
- {
2528
- clear_last_error();
2529
- #if defined(BOOST_ASIO_WINDOWS_RUNTIME)
2530
- using namespace std; // For sscanf.
2531
- unsigned char* bytes = static_cast<unsigned char*>(dest);
2532
- if (af == BOOST_ASIO_OS_DEF(AF_INET))
2533
- {
2534
- unsigned int b0, b1, b2, b3;
2535
- if (sscanf_s(src, "%u.%u.%u.%u", &b0, &b1, &b2, &b3) != 4)
2536
- {
2537
- ec = boost::asio::error::invalid_argument;
2538
- return -1;
2539
- }
2540
- if (b0 > 255 || b1 > 255 || b2 > 255 || b3 > 255)
2541
- {
2542
- ec = boost::asio::error::invalid_argument;
2543
- return -1;
2544
- }
2545
- bytes[0] = static_cast<unsigned char>(b0);
2546
- bytes[1] = static_cast<unsigned char>(b1);
2547
- bytes[2] = static_cast<unsigned char>(b2);
2548
- bytes[3] = static_cast<unsigned char>(b3);
2549
- ec.assign(0, ec.category());
2550
- return 1;
2551
- }
2552
- else if (af == BOOST_ASIO_OS_DEF(AF_INET6))
2553
- {
2554
- unsigned char* bytes = static_cast<unsigned char*>(dest);
2555
- std::memset(bytes, 0, 16);
2556
- unsigned char back_bytes[16] = { 0 };
2557
- int num_front_bytes = 0, num_back_bytes = 0;
2558
- const char* p = src;
2559
-
2560
- enum { fword, fcolon, bword, scope, done } state = fword;
2561
- unsigned long current_word = 0;
2562
- while (state != done)
2563
- {
2564
- if (current_word > 0xFFFF)
2565
- {
2566
- ec = boost::asio::error::invalid_argument;
2567
- return -1;
2568
- }
2569
-
2570
- switch (state)
2571
- {
2572
- case fword:
2573
- if (*p >= '0' && *p <= '9')
2574
- current_word = current_word * 16 + *p++ - '0';
2575
- else if (*p >= 'a' && *p <= 'f')
2576
- current_word = current_word * 16 + *p++ - 'a' + 10;
2577
- else if (*p >= 'A' && *p <= 'F')
2578
- current_word = current_word * 16 + *p++ - 'A' + 10;
2579
- else
2580
- {
2581
- if (num_front_bytes == 16)
2582
- {
2583
- ec = boost::asio::error::invalid_argument;
2584
- return -1;
2585
- }
2586
-
2587
- bytes[num_front_bytes++] = (current_word >> 8) & 0xFF;
2588
- bytes[num_front_bytes++] = current_word & 0xFF;
2589
- current_word = 0;
2590
-
2591
- if (*p == ':')
2592
- state = fcolon, ++p;
2593
- else if (*p == '%')
2594
- state = scope, ++p;
2595
- else if (*p == 0)
2596
- state = done;
2597
- else
2598
- {
2599
- ec = boost::asio::error::invalid_argument;
2600
- return -1;
2601
- }
2602
- }
2603
- break;
2604
-
2605
- case fcolon:
2606
- if (*p == ':')
2607
- state = bword, ++p;
2608
- else
2609
- state = fword;
2610
- break;
2611
-
2612
- case bword:
2613
- if (*p >= '0' && *p <= '9')
2614
- current_word = current_word * 16 + *p++ - '0';
2615
- else if (*p >= 'a' && *p <= 'f')
2616
- current_word = current_word * 16 + *p++ - 'a' + 10;
2617
- else if (*p >= 'A' && *p <= 'F')
2618
- current_word = current_word * 16 + *p++ - 'A' + 10;
2619
- else
2620
- {
2621
- if (num_front_bytes + num_back_bytes == 16)
2622
- {
2623
- ec = boost::asio::error::invalid_argument;
2624
- return -1;
2625
- }
2626
-
2627
- back_bytes[num_back_bytes++] = (current_word >> 8) & 0xFF;
2628
- back_bytes[num_back_bytes++] = current_word & 0xFF;
2629
- current_word = 0;
2630
-
2631
- if (*p == ':')
2632
- state = bword, ++p;
2633
- else if (*p == '%')
2634
- state = scope, ++p;
2635
- else if (*p == 0)
2636
- state = done;
2637
- else
2638
- {
2639
- ec = boost::asio::error::invalid_argument;
2640
- return -1;
2641
- }
2642
- }
2643
- break;
2644
-
2645
- case scope:
2646
- if (*p >= '0' && *p <= '9')
2647
- current_word = current_word * 10 + *p++ - '0';
2648
- else if (*p == 0)
2649
- *scope_id = current_word, state = done;
2650
- else
2651
- {
2652
- ec = boost::asio::error::invalid_argument;
2653
- return -1;
2654
- }
2655
- break;
2656
-
2657
- default:
2658
- break;
2659
- }
2660
- }
2661
-
2662
- for (int i = 0; i < num_back_bytes; ++i)
2663
- bytes[16 - num_back_bytes + i] = back_bytes[i];
2664
-
2665
- ec.assign(0, ec.category());
2666
- return 1;
2667
- }
2668
- else
2669
- {
2670
- ec = boost::asio::error::address_family_not_supported;
2671
- return -1;
2672
- }
2673
- #elif defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
2674
- using namespace std; // For memcpy and strcmp.
2675
-
2676
- if (af != BOOST_ASIO_OS_DEF(AF_INET) && af != BOOST_ASIO_OS_DEF(AF_INET6))
2677
- {
2678
- ec = boost::asio::error::address_family_not_supported;
2679
- return -1;
2680
- }
2681
-
2682
- union
2683
- {
2684
- socket_addr_type base;
2685
- sockaddr_storage_type storage;
2686
- sockaddr_in4_type v4;
2687
- sockaddr_in6_type v6;
2688
- } address;
2689
- int address_length = sizeof(sockaddr_storage_type);
2690
- #if defined(BOOST_NO_ANSI_APIS) || (defined(_MSC_VER) && (_MSC_VER >= 1800))
2691
- int num_wide_chars = static_cast<int>(strlen(src)) + 1;
2692
- LPWSTR wide_buffer = (LPWSTR)_alloca(num_wide_chars * sizeof(WCHAR));
2693
- ::MultiByteToWideChar(CP_ACP, 0, src, -1, wide_buffer, num_wide_chars);
2694
- int result = ::WSAStringToAddressW(wide_buffer,
2695
- af, 0, &address.base, &address_length);
2696
- get_last_error(ec, true);
2697
- #else
2698
- int result = ::WSAStringToAddressA(const_cast<char*>(src),
2699
- af, 0, &address.base, &address_length);
2700
- get_last_error(ec, true);
2701
- #endif
2702
-
2703
- if (af == BOOST_ASIO_OS_DEF(AF_INET))
2704
- {
2705
- if (result != socket_error_retval)
2706
- {
2707
- memcpy(dest, &address.v4.sin_addr, sizeof(in4_addr_type));
2708
- ec.assign(0, ec.category());
2709
- }
2710
- else if (strcmp(src, "255.255.255.255") == 0)
2711
- {
2712
- static_cast<in4_addr_type*>(dest)->s_addr = INADDR_NONE;
2713
- ec.assign(0, ec.category());
2714
- }
2715
- }
2716
- else // AF_INET6
2717
- {
2718
- if (result != socket_error_retval)
2719
- {
2720
- memcpy(dest, &address.v6.sin6_addr, sizeof(in6_addr_type));
2721
- if (scope_id)
2722
- *scope_id = address.v6.sin6_scope_id;
2723
- ec.assign(0, ec.category());
2724
- }
2725
- }
2726
-
2727
- // Windows may not set an error code on failure.
2728
- if (result == socket_error_retval && !ec)
2729
- ec = boost::asio::error::invalid_argument;
2730
-
2731
- if (result != socket_error_retval)
2732
- ec.assign(0, ec.category());
2733
-
2734
- return result == socket_error_retval ? -1 : 1;
2735
- #else // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
2736
- using namespace std; // For strchr, memcpy and atoi.
2737
-
2738
- // On some platforms, inet_pton fails if an address string contains a scope
2739
- // id. Detect and remove the scope id before passing the string to inet_pton.
2740
- const bool is_v6 = (af == BOOST_ASIO_OS_DEF(AF_INET6));
2741
- const char* if_name = is_v6 ? strchr(src, '%') : 0;
2742
- char src_buf[max_addr_v6_str_len + 1];
2743
- const char* src_ptr = src;
2744
- if (if_name != 0)
2745
- {
2746
- if (if_name - src > max_addr_v6_str_len)
2747
- {
2748
- ec = boost::asio::error::invalid_argument;
2749
- return 0;
2750
- }
2751
- memcpy(src_buf, src, if_name - src);
2752
- src_buf[if_name - src] = 0;
2753
- src_ptr = src_buf;
2754
- }
2755
-
2756
- int result = ::inet_pton(af, src_ptr, dest);
2757
- get_last_error(ec, true);
2758
- if (result <= 0 && !ec)
2759
- ec = boost::asio::error::invalid_argument;
2760
- if (result > 0 && is_v6 && scope_id)
2761
- {
2762
- using namespace std; // For strchr and atoi.
2763
- *scope_id = 0;
2764
- if (if_name != 0)
2765
- {
2766
- in6_addr_type* ipv6_address = static_cast<in6_addr_type*>(dest);
2767
- bool is_link_local = ((ipv6_address->s6_addr[0] == 0xfe)
2768
- && ((ipv6_address->s6_addr[1] & 0xc0) == 0x80));
2769
- bool is_multicast_link_local = ((ipv6_address->s6_addr[0] == 0xff)
2770
- && ((ipv6_address->s6_addr[1] & 0x0f) == 0x02));
2771
- if (is_link_local || is_multicast_link_local)
2772
- *scope_id = if_nametoindex(if_name + 1);
2773
- if (*scope_id == 0)
2774
- *scope_id = atoi(if_name + 1);
2775
- }
2776
- }
2777
- return result;
2778
- #endif // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
2779
- }
2780
-
2781
- int gethostname(char* name, int namelen, boost::system::error_code& ec)
2782
- {
2783
- #if defined(BOOST_ASIO_WINDOWS_RUNTIME)
2784
- try
2785
- {
2786
- using namespace Windows::Foundation::Collections;
2787
- using namespace Windows::Networking;
2788
- using namespace Windows::Networking::Connectivity;
2789
- IVectorView<HostName^>^ hostnames = NetworkInformation::GetHostNames();
2790
- for (unsigned i = 0; i < hostnames->Size; ++i)
2791
- {
2792
- HostName^ hostname = hostnames->GetAt(i);
2793
- if (hostname->Type == HostNameType::DomainName)
2794
- {
2795
- std::wstring_convert<std::codecvt_utf8<wchar_t>> converter;
2796
- std::string raw_name = converter.to_bytes(hostname->RawName->Data());
2797
- if (namelen > 0 && raw_name.size() < static_cast<std::size_t>(namelen))
2798
- {
2799
- strcpy_s(name, namelen, raw_name.c_str());
2800
- return 0;
2801
- }
2802
- }
2803
- }
2804
- return -1;
2805
- }
2806
- catch (Platform::Exception^ e)
2807
- {
2808
- ec = boost::system::error_code(e->HResult,
2809
- boost::system::system_category());
2810
- return -1;
2811
- }
2812
- #else // defined(BOOST_ASIO_WINDOWS_RUNTIME)
2813
- int result = ::gethostname(name, namelen);
2814
- get_last_error(ec, result != 0);
2815
- return result;
2816
- #endif // defined(BOOST_ASIO_WINDOWS_RUNTIME)
2817
- }
2818
-
2819
- #if !defined(BOOST_ASIO_WINDOWS_RUNTIME)
2820
-
2821
- #if !defined(BOOST_ASIO_HAS_GETADDRINFO)
2822
-
2823
- // The following functions are only needed for emulation of getaddrinfo and
2824
- // getnameinfo.
2825
-
2826
- inline boost::system::error_code translate_netdb_error(int error)
2827
- {
2828
- switch (error)
2829
- {
2830
- case 0:
2831
- return boost::system::error_code();
2832
- case HOST_NOT_FOUND:
2833
- return boost::asio::error::host_not_found;
2834
- case TRY_AGAIN:
2835
- return boost::asio::error::host_not_found_try_again;
2836
- case NO_RECOVERY:
2837
- return boost::asio::error::no_recovery;
2838
- case NO_DATA:
2839
- return boost::asio::error::no_data;
2840
- default:
2841
- BOOST_ASIO_ASSERT(false);
2842
- return boost::asio::error::invalid_argument;
2843
- }
2844
- }
2845
-
2846
- inline hostent* gethostbyaddr(const char* addr, int length, int af,
2847
- hostent* result, char* buffer, int buflength, boost::system::error_code& ec)
2848
- {
2849
- #if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
2850
- (void)(buffer);
2851
- (void)(buflength);
2852
- hostent* retval = ::gethostbyaddr(addr, length, af);
2853
- get_last_error(ec, !retval);
2854
- if (!retval)
2855
- return 0;
2856
- *result = *retval;
2857
- return retval;
2858
- #elif defined(__sun) || defined(__QNX__)
2859
- int error = 0;
2860
- hostent* retval = ::gethostbyaddr_r(addr, length,
2861
- af, result, buffer, buflength, &error);
2862
- get_last_error(ec, !retval);
2863
- if (error)
2864
- ec = translate_netdb_error(error);
2865
- return retval;
2866
- #elif defined(__MACH__) && defined(__APPLE__)
2867
- (void)(buffer);
2868
- (void)(buflength);
2869
- int error = 0;
2870
- hostent* retval = ::getipnodebyaddr(addr, length, af, &error);
2871
- get_last_error(ec, !retval);
2872
- if (error)
2873
- ec = translate_netdb_error(error);
2874
- if (!retval)
2875
- return 0;
2876
- *result = *retval;
2877
- return retval;
2878
- #else
2879
- hostent* retval = 0;
2880
- int error = 0;
2881
- clear_last_error();
2882
- ::gethostbyaddr_r(addr, length, af, result,
2883
- buffer, buflength, &retval, &error);
2884
- get_last_error(ec, true);
2885
- if (error)
2886
- ec = translate_netdb_error(error);
2887
- return retval;
2888
- #endif
2889
- }
2890
-
2891
- inline hostent* gethostbyname(const char* name, int af, struct hostent* result,
2892
- char* buffer, int buflength, int ai_flags, boost::system::error_code& ec)
2893
- {
2894
- #if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
2895
- (void)(buffer);
2896
- (void)(buflength);
2897
- (void)(ai_flags);
2898
- if (af != BOOST_ASIO_OS_DEF(AF_INET))
2899
- {
2900
- ec = boost::asio::error::address_family_not_supported;
2901
- return 0;
2902
- }
2903
- hostent* retval = ::gethostbyname(name);
2904
- get_last_error(ec, !retval);
2905
- if (!retval)
2906
- return 0;
2907
- *result = *retval;
2908
- return result;
2909
- #elif defined(__sun) || defined(__QNX__)
2910
- (void)(ai_flags);
2911
- if (af != BOOST_ASIO_OS_DEF(AF_INET))
2912
- {
2913
- ec = boost::asio::error::address_family_not_supported;
2914
- return 0;
2915
- }
2916
- int error = 0;
2917
- hostent* retval = ::gethostbyname_r(name, result, buffer, buflength, &error);
2918
- get_last_error(ec, !retval);
2919
- if (error)
2920
- ec = translate_netdb_error(error);
2921
- return retval;
2922
- #elif defined(__MACH__) && defined(__APPLE__)
2923
- (void)(buffer);
2924
- (void)(buflength);
2925
- int error = 0;
2926
- hostent* retval = ::getipnodebyname(name, af, ai_flags, &error);
2927
- get_last_error(ec, !retval);
2928
- if (error)
2929
- ec = translate_netdb_error(error);
2930
- if (!retval)
2931
- return 0;
2932
- *result = *retval;
2933
- return retval;
2934
- #else
2935
- (void)(ai_flags);
2936
- if (af != BOOST_ASIO_OS_DEF(AF_INET))
2937
- {
2938
- ec = boost::asio::error::address_family_not_supported;
2939
- return 0;
2940
- }
2941
- hostent* retval = 0;
2942
- int error = 0;
2943
- clear_last_error();
2944
- ::gethostbyname_r(name, result, buffer, buflength, &retval, &error);
2945
- get_last_error(ec, true);
2946
- if (error)
2947
- ec = translate_netdb_error(error);
2948
- return retval;
2949
- #endif
2950
- }
2951
-
2952
- inline void freehostent(hostent* h)
2953
- {
2954
- #if defined(__MACH__) && defined(__APPLE__)
2955
- if (h)
2956
- ::freehostent(h);
2957
- #else
2958
- (void)(h);
2959
- #endif
2960
- }
2961
-
2962
- // Emulation of getaddrinfo based on implementation in:
2963
- // Stevens, W. R., UNIX Network Programming Vol. 1, 2nd Ed., Prentice-Hall 1998.
2964
-
2965
- struct gai_search
2966
- {
2967
- const char* host;
2968
- int family;
2969
- };
2970
-
2971
- inline int gai_nsearch(const char* host,
2972
- const addrinfo_type* hints, gai_search (&search)[2])
2973
- {
2974
- int search_count = 0;
2975
- if (host == 0 || host[0] == '\0')
2976
- {
2977
- if (hints->ai_flags & AI_PASSIVE)
2978
- {
2979
- // No host and AI_PASSIVE implies wildcard bind.
2980
- switch (hints->ai_family)
2981
- {
2982
- case BOOST_ASIO_OS_DEF(AF_INET):
2983
- search[search_count].host = "0.0.0.0";
2984
- search[search_count].family = BOOST_ASIO_OS_DEF(AF_INET);
2985
- ++search_count;
2986
- break;
2987
- case BOOST_ASIO_OS_DEF(AF_INET6):
2988
- search[search_count].host = "0::0";
2989
- search[search_count].family = BOOST_ASIO_OS_DEF(AF_INET6);
2990
- ++search_count;
2991
- break;
2992
- case BOOST_ASIO_OS_DEF(AF_UNSPEC):
2993
- search[search_count].host = "0::0";
2994
- search[search_count].family = BOOST_ASIO_OS_DEF(AF_INET6);
2995
- ++search_count;
2996
- search[search_count].host = "0.0.0.0";
2997
- search[search_count].family = BOOST_ASIO_OS_DEF(AF_INET);
2998
- ++search_count;
2999
- break;
3000
- default:
3001
- break;
3002
- }
3003
- }
3004
- else
3005
- {
3006
- // No host and not AI_PASSIVE means connect to local host.
3007
- switch (hints->ai_family)
3008
- {
3009
- case BOOST_ASIO_OS_DEF(AF_INET):
3010
- search[search_count].host = "localhost";
3011
- search[search_count].family = BOOST_ASIO_OS_DEF(AF_INET);
3012
- ++search_count;
3013
- break;
3014
- case BOOST_ASIO_OS_DEF(AF_INET6):
3015
- search[search_count].host = "localhost";
3016
- search[search_count].family = BOOST_ASIO_OS_DEF(AF_INET6);
3017
- ++search_count;
3018
- break;
3019
- case BOOST_ASIO_OS_DEF(AF_UNSPEC):
3020
- search[search_count].host = "localhost";
3021
- search[search_count].family = BOOST_ASIO_OS_DEF(AF_INET6);
3022
- ++search_count;
3023
- search[search_count].host = "localhost";
3024
- search[search_count].family = BOOST_ASIO_OS_DEF(AF_INET);
3025
- ++search_count;
3026
- break;
3027
- default:
3028
- break;
3029
- }
3030
- }
3031
- }
3032
- else
3033
- {
3034
- // Host is specified.
3035
- switch (hints->ai_family)
3036
- {
3037
- case BOOST_ASIO_OS_DEF(AF_INET):
3038
- search[search_count].host = host;
3039
- search[search_count].family = BOOST_ASIO_OS_DEF(AF_INET);
3040
- ++search_count;
3041
- break;
3042
- case BOOST_ASIO_OS_DEF(AF_INET6):
3043
- search[search_count].host = host;
3044
- search[search_count].family = BOOST_ASIO_OS_DEF(AF_INET6);
3045
- ++search_count;
3046
- break;
3047
- case BOOST_ASIO_OS_DEF(AF_UNSPEC):
3048
- search[search_count].host = host;
3049
- search[search_count].family = BOOST_ASIO_OS_DEF(AF_INET6);
3050
- ++search_count;
3051
- search[search_count].host = host;
3052
- search[search_count].family = BOOST_ASIO_OS_DEF(AF_INET);
3053
- ++search_count;
3054
- break;
3055
- default:
3056
- break;
3057
- }
3058
- }
3059
- return search_count;
3060
- }
3061
-
3062
- template <typename T>
3063
- inline T* gai_alloc(std::size_t size = sizeof(T))
3064
- {
3065
- using namespace std;
3066
- T* p = static_cast<T*>(::operator new(size, std::nothrow));
3067
- if (p)
3068
- memset(p, 0, size);
3069
- return p;
3070
- }
3071
-
3072
- inline void gai_free(void* p)
3073
- {
3074
- ::operator delete(p);
3075
- }
3076
-
3077
- inline void gai_strcpy(char* target, const char* source, std::size_t max_size)
3078
- {
3079
- using namespace std;
3080
- #if defined(BOOST_ASIO_HAS_SECURE_RTL)
3081
- strcpy_s(target, max_size, source);
3082
- #else // defined(BOOST_ASIO_HAS_SECURE_RTL)
3083
- *target = 0;
3084
- if (max_size > 0)
3085
- strncat(target, source, max_size - 1);
3086
- #endif // defined(BOOST_ASIO_HAS_SECURE_RTL)
3087
- }
3088
-
3089
- enum { gai_clone_flag = 1 << 30 };
3090
-
3091
- inline int gai_aistruct(addrinfo_type*** next, const addrinfo_type* hints,
3092
- const void* addr, int family)
3093
- {
3094
- using namespace std;
3095
-
3096
- addrinfo_type* ai = gai_alloc<addrinfo_type>();
3097
- if (ai == 0)
3098
- return EAI_MEMORY;
3099
-
3100
- ai->ai_next = 0;
3101
- **next = ai;
3102
- *next = &ai->ai_next;
3103
-
3104
- ai->ai_canonname = 0;
3105
- ai->ai_socktype = hints->ai_socktype;
3106
- if (ai->ai_socktype == 0)
3107
- ai->ai_flags |= gai_clone_flag;
3108
- ai->ai_protocol = hints->ai_protocol;
3109
- ai->ai_family = family;
3110
-
3111
- switch (ai->ai_family)
3112
- {
3113
- case BOOST_ASIO_OS_DEF(AF_INET):
3114
- {
3115
- sockaddr_in4_type* sinptr = gai_alloc<sockaddr_in4_type>();
3116
- if (sinptr == 0)
3117
- return EAI_MEMORY;
3118
- sinptr->sin_family = BOOST_ASIO_OS_DEF(AF_INET);
3119
- memcpy(&sinptr->sin_addr, addr, sizeof(in4_addr_type));
3120
- ai->ai_addr = reinterpret_cast<sockaddr*>(sinptr);
3121
- ai->ai_addrlen = sizeof(sockaddr_in4_type);
3122
- break;
3123
- }
3124
- case BOOST_ASIO_OS_DEF(AF_INET6):
3125
- {
3126
- sockaddr_in6_type* sin6ptr = gai_alloc<sockaddr_in6_type>();
3127
- if (sin6ptr == 0)
3128
- return EAI_MEMORY;
3129
- sin6ptr->sin6_family = BOOST_ASIO_OS_DEF(AF_INET6);
3130
- memcpy(&sin6ptr->sin6_addr, addr, sizeof(in6_addr_type));
3131
- ai->ai_addr = reinterpret_cast<sockaddr*>(sin6ptr);
3132
- ai->ai_addrlen = sizeof(sockaddr_in6_type);
3133
- break;
3134
- }
3135
- default:
3136
- break;
3137
- }
3138
-
3139
- return 0;
3140
- }
3141
-
3142
- inline addrinfo_type* gai_clone(addrinfo_type* ai)
3143
- {
3144
- using namespace std;
3145
-
3146
- addrinfo_type* new_ai = gai_alloc<addrinfo_type>();
3147
- if (new_ai == 0)
3148
- return new_ai;
3149
-
3150
- new_ai->ai_next = ai->ai_next;
3151
- ai->ai_next = new_ai;
3152
-
3153
- new_ai->ai_flags = 0;
3154
- new_ai->ai_family = ai->ai_family;
3155
- new_ai->ai_socktype = ai->ai_socktype;
3156
- new_ai->ai_protocol = ai->ai_protocol;
3157
- new_ai->ai_canonname = 0;
3158
- new_ai->ai_addrlen = ai->ai_addrlen;
3159
- new_ai->ai_addr = gai_alloc<sockaddr>(ai->ai_addrlen);
3160
- memcpy(new_ai->ai_addr, ai->ai_addr, ai->ai_addrlen);
3161
-
3162
- return new_ai;
3163
- }
3164
-
3165
- inline int gai_port(addrinfo_type* aihead, int port, int socktype)
3166
- {
3167
- int num_found = 0;
3168
-
3169
- for (addrinfo_type* ai = aihead; ai; ai = ai->ai_next)
3170
- {
3171
- if (ai->ai_flags & gai_clone_flag)
3172
- {
3173
- if (ai->ai_socktype != 0)
3174
- {
3175
- ai = gai_clone(ai);
3176
- if (ai == 0)
3177
- return -1;
3178
- // ai now points to newly cloned entry.
3179
- }
3180
- }
3181
- else if (ai->ai_socktype != socktype)
3182
- {
3183
- // Ignore if mismatch on socket type.
3184
- continue;
3185
- }
3186
-
3187
- ai->ai_socktype = socktype;
3188
-
3189
- switch (ai->ai_family)
3190
- {
3191
- case BOOST_ASIO_OS_DEF(AF_INET):
3192
- {
3193
- sockaddr_in4_type* sinptr =
3194
- reinterpret_cast<sockaddr_in4_type*>(ai->ai_addr);
3195
- sinptr->sin_port = port;
3196
- ++num_found;
3197
- break;
3198
- }
3199
- case BOOST_ASIO_OS_DEF(AF_INET6):
3200
- {
3201
- sockaddr_in6_type* sin6ptr =
3202
- reinterpret_cast<sockaddr_in6_type*>(ai->ai_addr);
3203
- sin6ptr->sin6_port = port;
3204
- ++num_found;
3205
- break;
3206
- }
3207
- default:
3208
- break;
3209
- }
3210
- }
3211
-
3212
- return num_found;
3213
- }
3214
-
3215
- inline int gai_serv(addrinfo_type* aihead,
3216
- const addrinfo_type* hints, const char* serv)
3217
- {
3218
- using namespace std;
3219
-
3220
- int num_found = 0;
3221
-
3222
- if (
3223
- #if defined(AI_NUMERICSERV)
3224
- (hints->ai_flags & AI_NUMERICSERV) ||
3225
- #endif
3226
- isdigit(static_cast<unsigned char>(serv[0])))
3227
- {
3228
- int port = htons(atoi(serv));
3229
- if (hints->ai_socktype)
3230
- {
3231
- // Caller specifies socket type.
3232
- int rc = gai_port(aihead, port, hints->ai_socktype);
3233
- if (rc < 0)
3234
- return EAI_MEMORY;
3235
- num_found += rc;
3236
- }
3237
- else
3238
- {
3239
- // Caller does not specify socket type.
3240
- int rc = gai_port(aihead, port, SOCK_STREAM);
3241
- if (rc < 0)
3242
- return EAI_MEMORY;
3243
- num_found += rc;
3244
- rc = gai_port(aihead, port, SOCK_DGRAM);
3245
- if (rc < 0)
3246
- return EAI_MEMORY;
3247
- num_found += rc;
3248
- }
3249
- }
3250
- else
3251
- {
3252
- // Try service name with TCP first, then UDP.
3253
- if (hints->ai_socktype == 0 || hints->ai_socktype == SOCK_STREAM)
3254
- {
3255
- servent* sptr = getservbyname(serv, "tcp");
3256
- if (sptr != 0)
3257
- {
3258
- int rc = gai_port(aihead, sptr->s_port, SOCK_STREAM);
3259
- if (rc < 0)
3260
- return EAI_MEMORY;
3261
- num_found += rc;
3262
- }
3263
- }
3264
- if (hints->ai_socktype == 0 || hints->ai_socktype == SOCK_DGRAM)
3265
- {
3266
- servent* sptr = getservbyname(serv, "udp");
3267
- if (sptr != 0)
3268
- {
3269
- int rc = gai_port(aihead, sptr->s_port, SOCK_DGRAM);
3270
- if (rc < 0)
3271
- return EAI_MEMORY;
3272
- num_found += rc;
3273
- }
3274
- }
3275
- }
3276
-
3277
- if (num_found == 0)
3278
- {
3279
- if (hints->ai_socktype == 0)
3280
- {
3281
- // All calls to getservbyname() failed.
3282
- return EAI_NONAME;
3283
- }
3284
- else
3285
- {
3286
- // Service not supported for socket type.
3287
- return EAI_SERVICE;
3288
- }
3289
- }
3290
-
3291
- return 0;
3292
- }
3293
-
3294
- inline int gai_echeck(const char* host, const char* service,
3295
- int flags, int family, int socktype, int protocol)
3296
- {
3297
- (void)(flags);
3298
- (void)(protocol);
3299
-
3300
- // Host or service must be specified.
3301
- if (host == 0 || host[0] == '\0')
3302
- if (service == 0 || service[0] == '\0')
3303
- return EAI_NONAME;
3304
-
3305
- // Check combination of family and socket type.
3306
- switch (family)
3307
- {
3308
- case BOOST_ASIO_OS_DEF(AF_UNSPEC):
3309
- break;
3310
- case BOOST_ASIO_OS_DEF(AF_INET):
3311
- case BOOST_ASIO_OS_DEF(AF_INET6):
3312
- if (service != 0 && service[0] != '\0')
3313
- if (socktype != 0 && socktype != SOCK_STREAM && socktype != SOCK_DGRAM)
3314
- return EAI_SOCKTYPE;
3315
- break;
3316
- default:
3317
- return EAI_FAMILY;
3318
- }
3319
-
3320
- return 0;
3321
- }
3322
-
3323
- inline void freeaddrinfo_emulation(addrinfo_type* aihead)
3324
- {
3325
- addrinfo_type* ai = aihead;
3326
- while (ai)
3327
- {
3328
- gai_free(ai->ai_addr);
3329
- gai_free(ai->ai_canonname);
3330
- addrinfo_type* ainext = ai->ai_next;
3331
- gai_free(ai);
3332
- ai = ainext;
3333
- }
3334
- }
3335
-
3336
- inline int getaddrinfo_emulation(const char* host, const char* service,
3337
- const addrinfo_type* hintsp, addrinfo_type** result)
3338
- {
3339
- // Set up linked list of addrinfo structures.
3340
- addrinfo_type* aihead = 0;
3341
- addrinfo_type** ainext = &aihead;
3342
- char* canon = 0;
3343
-
3344
- // Supply default hints if not specified by caller.
3345
- addrinfo_type hints = addrinfo_type();
3346
- hints.ai_family = BOOST_ASIO_OS_DEF(AF_UNSPEC);
3347
- if (hintsp)
3348
- hints = *hintsp;
3349
-
3350
- // If the resolution is not specifically for AF_INET6, remove the AI_V4MAPPED
3351
- // and AI_ALL flags.
3352
- #if defined(AI_V4MAPPED)
3353
- if (hints.ai_family != BOOST_ASIO_OS_DEF(AF_INET6))
3354
- hints.ai_flags &= ~AI_V4MAPPED;
3355
- #endif
3356
- #if defined(AI_ALL)
3357
- if (hints.ai_family != BOOST_ASIO_OS_DEF(AF_INET6))
3358
- hints.ai_flags &= ~AI_ALL;
3359
- #endif
3360
-
3361
- // Basic error checking.
3362
- int rc = gai_echeck(host, service, hints.ai_flags, hints.ai_family,
3363
- hints.ai_socktype, hints.ai_protocol);
3364
- if (rc != 0)
3365
- {
3366
- freeaddrinfo_emulation(aihead);
3367
- return rc;
3368
- }
3369
-
3370
- gai_search search[2];
3371
- int search_count = gai_nsearch(host, &hints, search);
3372
- for (gai_search* sptr = search; sptr < search + search_count; ++sptr)
3373
- {
3374
- // Check for IPv4 dotted decimal string.
3375
- in4_addr_type inaddr;
3376
- boost::system::error_code ec;
3377
- if (socket_ops::inet_pton(BOOST_ASIO_OS_DEF(AF_INET),
3378
- sptr->host, &inaddr, 0, ec) == 1)
3379
- {
3380
- if (hints.ai_family != BOOST_ASIO_OS_DEF(AF_UNSPEC)
3381
- && hints.ai_family != BOOST_ASIO_OS_DEF(AF_INET))
3382
- {
3383
- freeaddrinfo_emulation(aihead);
3384
- gai_free(canon);
3385
- return EAI_FAMILY;
3386
- }
3387
- if (sptr->family == BOOST_ASIO_OS_DEF(AF_INET))
3388
- {
3389
- rc = gai_aistruct(&ainext, &hints, &inaddr, BOOST_ASIO_OS_DEF(AF_INET));
3390
- if (rc != 0)
3391
- {
3392
- freeaddrinfo_emulation(aihead);
3393
- gai_free(canon);
3394
- return rc;
3395
- }
3396
- }
3397
- continue;
3398
- }
3399
-
3400
- // Check for IPv6 hex string.
3401
- in6_addr_type in6addr;
3402
- if (socket_ops::inet_pton(BOOST_ASIO_OS_DEF(AF_INET6),
3403
- sptr->host, &in6addr, 0, ec) == 1)
3404
- {
3405
- if (hints.ai_family != BOOST_ASIO_OS_DEF(AF_UNSPEC)
3406
- && hints.ai_family != BOOST_ASIO_OS_DEF(AF_INET6))
3407
- {
3408
- freeaddrinfo_emulation(aihead);
3409
- gai_free(canon);
3410
- return EAI_FAMILY;
3411
- }
3412
- if (sptr->family == BOOST_ASIO_OS_DEF(AF_INET6))
3413
- {
3414
- rc = gai_aistruct(&ainext, &hints, &in6addr,
3415
- BOOST_ASIO_OS_DEF(AF_INET6));
3416
- if (rc != 0)
3417
- {
3418
- freeaddrinfo_emulation(aihead);
3419
- gai_free(canon);
3420
- return rc;
3421
- }
3422
- }
3423
- continue;
3424
- }
3425
-
3426
- // Look up hostname.
3427
- hostent hent;
3428
- char hbuf[8192] = "";
3429
- hostent* hptr = socket_ops::gethostbyname(sptr->host,
3430
- sptr->family, &hent, hbuf, sizeof(hbuf), hints.ai_flags, ec);
3431
- if (hptr == 0)
3432
- {
3433
- if (search_count == 2)
3434
- {
3435
- // Failure is OK if there are multiple searches.
3436
- continue;
3437
- }
3438
- freeaddrinfo_emulation(aihead);
3439
- gai_free(canon);
3440
- if (ec == boost::asio::error::host_not_found)
3441
- return EAI_NONAME;
3442
- if (ec == boost::asio::error::host_not_found_try_again)
3443
- return EAI_AGAIN;
3444
- if (ec == boost::asio::error::no_recovery)
3445
- return EAI_FAIL;
3446
- if (ec == boost::asio::error::no_data)
3447
- return EAI_NONAME;
3448
- return EAI_NONAME;
3449
- }
3450
-
3451
- // Check for address family mismatch if one was specified.
3452
- if (hints.ai_family != BOOST_ASIO_OS_DEF(AF_UNSPEC)
3453
- && hints.ai_family != hptr->h_addrtype)
3454
- {
3455
- freeaddrinfo_emulation(aihead);
3456
- gai_free(canon);
3457
- socket_ops::freehostent(hptr);
3458
- return EAI_FAMILY;
3459
- }
3460
-
3461
- // Save canonical name first time.
3462
- if (host != 0 && host[0] != '\0' && hptr->h_name && hptr->h_name[0]
3463
- && (hints.ai_flags & AI_CANONNAME) && canon == 0)
3464
- {
3465
- std::size_t canon_len = strlen(hptr->h_name) + 1;
3466
- canon = gai_alloc<char>(canon_len);
3467
- if (canon == 0)
3468
- {
3469
- freeaddrinfo_emulation(aihead);
3470
- socket_ops::freehostent(hptr);
3471
- return EAI_MEMORY;
3472
- }
3473
- gai_strcpy(canon, hptr->h_name, canon_len);
3474
- }
3475
-
3476
- // Create an addrinfo structure for each returned address.
3477
- for (char** ap = hptr->h_addr_list; *ap; ++ap)
3478
- {
3479
- rc = gai_aistruct(&ainext, &hints, *ap, hptr->h_addrtype);
3480
- if (rc != 0)
3481
- {
3482
- freeaddrinfo_emulation(aihead);
3483
- gai_free(canon);
3484
- socket_ops::freehostent(hptr);
3485
- return EAI_FAMILY;
3486
- }
3487
- }
3488
-
3489
- socket_ops::freehostent(hptr);
3490
- }
3491
-
3492
- // Check if we found anything.
3493
- if (aihead == 0)
3494
- {
3495
- gai_free(canon);
3496
- return EAI_NONAME;
3497
- }
3498
-
3499
- // Return canonical name in first entry.
3500
- if (host != 0 && host[0] != '\0' && (hints.ai_flags & AI_CANONNAME))
3501
- {
3502
- if (canon)
3503
- {
3504
- aihead->ai_canonname = canon;
3505
- canon = 0;
3506
- }
3507
- else
3508
- {
3509
- std::size_t canonname_len = strlen(search[0].host) + 1;
3510
- aihead->ai_canonname = gai_alloc<char>(canonname_len);
3511
- if (aihead->ai_canonname == 0)
3512
- {
3513
- freeaddrinfo_emulation(aihead);
3514
- return EAI_MEMORY;
3515
- }
3516
- gai_strcpy(aihead->ai_canonname, search[0].host, canonname_len);
3517
- }
3518
- }
3519
- gai_free(canon);
3520
-
3521
- // Process the service name.
3522
- if (service != 0 && service[0] != '\0')
3523
- {
3524
- rc = gai_serv(aihead, &hints, service);
3525
- if (rc != 0)
3526
- {
3527
- freeaddrinfo_emulation(aihead);
3528
- return rc;
3529
- }
3530
- }
3531
-
3532
- // Return result to caller.
3533
- *result = aihead;
3534
- return 0;
3535
- }
3536
-
3537
- inline boost::system::error_code getnameinfo_emulation(
3538
- const socket_addr_type* sa, std::size_t salen, char* host,
3539
- std::size_t hostlen, char* serv, std::size_t servlen, int flags,
3540
- boost::system::error_code& ec)
3541
- {
3542
- using namespace std;
3543
-
3544
- const char* addr;
3545
- size_t addr_len;
3546
- unsigned short port;
3547
- switch (sa->sa_family)
3548
- {
3549
- case BOOST_ASIO_OS_DEF(AF_INET):
3550
- if (salen != sizeof(sockaddr_in4_type))
3551
- {
3552
- return ec = boost::asio::error::invalid_argument;
3553
- }
3554
- addr = reinterpret_cast<const char*>(
3555
- &reinterpret_cast<const sockaddr_in4_type*>(sa)->sin_addr);
3556
- addr_len = sizeof(in4_addr_type);
3557
- port = reinterpret_cast<const sockaddr_in4_type*>(sa)->sin_port;
3558
- break;
3559
- case BOOST_ASIO_OS_DEF(AF_INET6):
3560
- if (salen != sizeof(sockaddr_in6_type))
3561
- {
3562
- return ec = boost::asio::error::invalid_argument;
3563
- }
3564
- addr = reinterpret_cast<const char*>(
3565
- &reinterpret_cast<const sockaddr_in6_type*>(sa)->sin6_addr);
3566
- addr_len = sizeof(in6_addr_type);
3567
- port = reinterpret_cast<const sockaddr_in6_type*>(sa)->sin6_port;
3568
- break;
3569
- default:
3570
- return ec = boost::asio::error::address_family_not_supported;
3571
- }
3572
-
3573
- if (host && hostlen > 0)
3574
- {
3575
- if (flags & NI_NUMERICHOST)
3576
- {
3577
- if (socket_ops::inet_ntop(sa->sa_family, addr, host, hostlen, 0, ec) == 0)
3578
- {
3579
- return ec;
3580
- }
3581
- }
3582
- else
3583
- {
3584
- hostent hent;
3585
- char hbuf[8192] = "";
3586
- hostent* hptr = socket_ops::gethostbyaddr(addr,
3587
- static_cast<int>(addr_len), sa->sa_family,
3588
- &hent, hbuf, sizeof(hbuf), ec);
3589
- if (hptr && hptr->h_name && hptr->h_name[0] != '\0')
3590
- {
3591
- if (flags & NI_NOFQDN)
3592
- {
3593
- char* dot = strchr(hptr->h_name, '.');
3594
- if (dot)
3595
- {
3596
- *dot = 0;
3597
- }
3598
- }
3599
- gai_strcpy(host, hptr->h_name, hostlen);
3600
- socket_ops::freehostent(hptr);
3601
- }
3602
- else
3603
- {
3604
- socket_ops::freehostent(hptr);
3605
- if (flags & NI_NAMEREQD)
3606
- {
3607
- return ec = boost::asio::error::host_not_found;
3608
- }
3609
- if (socket_ops::inet_ntop(sa->sa_family,
3610
- addr, host, hostlen, 0, ec) == 0)
3611
- {
3612
- return ec;
3613
- }
3614
- }
3615
- }
3616
- }
3617
-
3618
- if (serv && servlen > 0)
3619
- {
3620
- if (flags & NI_NUMERICSERV)
3621
- {
3622
- if (servlen < 6)
3623
- {
3624
- return ec = boost::asio::error::no_buffer_space;
3625
- }
3626
- #if defined(BOOST_ASIO_HAS_SECURE_RTL)
3627
- sprintf_s(serv, servlen, "%u", ntohs(port));
3628
- #else // defined(BOOST_ASIO_HAS_SECURE_RTL)
3629
- sprintf(serv, "%u", ntohs(port));
3630
- #endif // defined(BOOST_ASIO_HAS_SECURE_RTL)
3631
- }
3632
- else
3633
- {
3634
- #if defined(BOOST_ASIO_HAS_PTHREADS)
3635
- static ::pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
3636
- ::pthread_mutex_lock(&mutex);
3637
- #endif // defined(BOOST_ASIO_HAS_PTHREADS)
3638
- servent* sptr = ::getservbyport(port, (flags & NI_DGRAM) ? "udp" : 0);
3639
- if (sptr && sptr->s_name && sptr->s_name[0] != '\0')
3640
- {
3641
- gai_strcpy(serv, sptr->s_name, servlen);
3642
- }
3643
- else
3644
- {
3645
- if (servlen < 6)
3646
- {
3647
- return ec = boost::asio::error::no_buffer_space;
3648
- }
3649
- #if defined(BOOST_ASIO_HAS_SECURE_RTL)
3650
- sprintf_s(serv, servlen, "%u", ntohs(port));
3651
- #else // defined(BOOST_ASIO_HAS_SECURE_RTL)
3652
- sprintf(serv, "%u", ntohs(port));
3653
- #endif // defined(BOOST_ASIO_HAS_SECURE_RTL)
3654
- }
3655
- #if defined(BOOST_ASIO_HAS_PTHREADS)
3656
- ::pthread_mutex_unlock(&mutex);
3657
- #endif // defined(BOOST_ASIO_HAS_PTHREADS)
3658
- }
3659
- }
3660
-
3661
- ec.assign(0, ec.category());
3662
- return ec;
3663
- }
3664
-
3665
- #endif // !defined(BOOST_ASIO_HAS_GETADDRINFO)
3666
-
3667
- inline boost::system::error_code translate_addrinfo_error(int error)
3668
- {
3669
- switch (error)
3670
- {
3671
- case 0:
3672
- return boost::system::error_code();
3673
- case EAI_AGAIN:
3674
- return boost::asio::error::host_not_found_try_again;
3675
- case EAI_BADFLAGS:
3676
- return boost::asio::error::invalid_argument;
3677
- case EAI_FAIL:
3678
- return boost::asio::error::no_recovery;
3679
- case EAI_FAMILY:
3680
- return boost::asio::error::address_family_not_supported;
3681
- case EAI_MEMORY:
3682
- return boost::asio::error::no_memory;
3683
- case EAI_NONAME:
3684
- #if defined(EAI_ADDRFAMILY)
3685
- case EAI_ADDRFAMILY:
3686
- #endif
3687
- #if defined(EAI_NODATA) && (EAI_NODATA != EAI_NONAME)
3688
- case EAI_NODATA:
3689
- #endif
3690
- return boost::asio::error::host_not_found;
3691
- case EAI_SERVICE:
3692
- return boost::asio::error::service_not_found;
3693
- case EAI_SOCKTYPE:
3694
- return boost::asio::error::socket_type_not_supported;
3695
- default: // Possibly the non-portable EAI_SYSTEM.
3696
- #if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
3697
- return boost::system::error_code(
3698
- WSAGetLastError(), boost::asio::error::get_system_category());
3699
- #else
3700
- return boost::system::error_code(
3701
- errno, boost::asio::error::get_system_category());
3702
- #endif
3703
- }
3704
- }
3705
-
3706
- boost::system::error_code getaddrinfo(const char* host,
3707
- const char* service, const addrinfo_type& hints,
3708
- addrinfo_type** result, boost::system::error_code& ec)
3709
- {
3710
- host = (host && *host) ? host : 0;
3711
- service = (service && *service) ? service : 0;
3712
- clear_last_error();
3713
- #if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
3714
- # if defined(BOOST_ASIO_HAS_GETADDRINFO)
3715
- // Building for Windows XP, Windows Server 2003, or later.
3716
- int error = ::getaddrinfo(host, service, &hints, result);
3717
- return ec = translate_addrinfo_error(error);
3718
- # else
3719
- // Building for Windows 2000 or earlier.
3720
- typedef int (WSAAPI *gai_t)(const char*,
3721
- const char*, const addrinfo_type*, addrinfo_type**);
3722
- if (HMODULE winsock_module = ::GetModuleHandleA("ws2_32"))
3723
- {
3724
- if (gai_t gai = (gai_t)::GetProcAddress(winsock_module, "getaddrinfo"))
3725
- {
3726
- int error = gai(host, service, &hints, result);
3727
- return ec = translate_addrinfo_error(error);
3728
- }
3729
- }
3730
- int error = getaddrinfo_emulation(host, service, &hints, result);
3731
- return ec = translate_addrinfo_error(error);
3732
- # endif
3733
- #elif !defined(BOOST_ASIO_HAS_GETADDRINFO)
3734
- int error = getaddrinfo_emulation(host, service, &hints, result);
3735
- return ec = translate_addrinfo_error(error);
3736
- #else
3737
- int error = ::getaddrinfo(host, service, &hints, result);
3738
- #if defined(__MACH__) && defined(__APPLE__)
3739
- using namespace std; // For isdigit and atoi.
3740
- if (error == 0 && service && isdigit(static_cast<unsigned char>(service[0])))
3741
- {
3742
- u_short_type port = host_to_network_short(atoi(service));
3743
- for (addrinfo_type* ai = *result; ai; ai = ai->ai_next)
3744
- {
3745
- switch (ai->ai_family)
3746
- {
3747
- case BOOST_ASIO_OS_DEF(AF_INET):
3748
- {
3749
- sockaddr_in4_type* sinptr =
3750
- reinterpret_cast<sockaddr_in4_type*>(ai->ai_addr);
3751
- if (sinptr->sin_port == 0)
3752
- sinptr->sin_port = port;
3753
- break;
3754
- }
3755
- case BOOST_ASIO_OS_DEF(AF_INET6):
3756
- {
3757
- sockaddr_in6_type* sin6ptr =
3758
- reinterpret_cast<sockaddr_in6_type*>(ai->ai_addr);
3759
- if (sin6ptr->sin6_port == 0)
3760
- sin6ptr->sin6_port = port;
3761
- break;
3762
- }
3763
- default:
3764
- break;
3765
- }
3766
- }
3767
- }
3768
- #endif
3769
- return ec = translate_addrinfo_error(error);
3770
- #endif
3771
- }
3772
-
3773
- boost::system::error_code background_getaddrinfo(
3774
- const weak_cancel_token_type& cancel_token, const char* host,
3775
- const char* service, const addrinfo_type& hints,
3776
- addrinfo_type** result, boost::system::error_code& ec)
3777
- {
3778
- if (cancel_token.expired())
3779
- ec = boost::asio::error::operation_aborted;
3780
- else
3781
- socket_ops::getaddrinfo(host, service, hints, result, ec);
3782
- return ec;
3783
- }
3784
-
3785
- void freeaddrinfo(addrinfo_type* ai)
3786
- {
3787
- #if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
3788
- # if defined(BOOST_ASIO_HAS_GETADDRINFO)
3789
- // Building for Windows XP, Windows Server 2003, or later.
3790
- ::freeaddrinfo(ai);
3791
- # else
3792
- // Building for Windows 2000 or earlier.
3793
- typedef int (WSAAPI *fai_t)(addrinfo_type*);
3794
- if (HMODULE winsock_module = ::GetModuleHandleA("ws2_32"))
3795
- {
3796
- if (fai_t fai = (fai_t)::GetProcAddress(winsock_module, "freeaddrinfo"))
3797
- {
3798
- fai(ai);
3799
- return;
3800
- }
3801
- }
3802
- freeaddrinfo_emulation(ai);
3803
- # endif
3804
- #elif !defined(BOOST_ASIO_HAS_GETADDRINFO)
3805
- freeaddrinfo_emulation(ai);
3806
- #else
3807
- ::freeaddrinfo(ai);
3808
- #endif
3809
- }
3810
-
3811
- boost::system::error_code getnameinfo(const socket_addr_type* addr,
3812
- std::size_t addrlen, char* host, std::size_t hostlen,
3813
- char* serv, std::size_t servlen, int flags, boost::system::error_code& ec)
3814
- {
3815
- #if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
3816
- # if defined(BOOST_ASIO_HAS_GETADDRINFO)
3817
- // Building for Windows XP, Windows Server 2003, or later.
3818
- clear_last_error();
3819
- int error = ::getnameinfo(addr, static_cast<socklen_t>(addrlen),
3820
- host, static_cast<DWORD>(hostlen),
3821
- serv, static_cast<DWORD>(servlen), flags);
3822
- return ec = translate_addrinfo_error(error);
3823
- # else
3824
- // Building for Windows 2000 or earlier.
3825
- typedef int (WSAAPI *gni_t)(const socket_addr_type*,
3826
- int, char*, DWORD, char*, DWORD, int);
3827
- if (HMODULE winsock_module = ::GetModuleHandleA("ws2_32"))
3828
- {
3829
- if (gni_t gni = (gni_t)::GetProcAddress(winsock_module, "getnameinfo"))
3830
- {
3831
- clear_last_error();
3832
- int error = gni(addr, static_cast<int>(addrlen),
3833
- host, static_cast<DWORD>(hostlen),
3834
- serv, static_cast<DWORD>(servlen), flags);
3835
- return ec = translate_addrinfo_error(error);
3836
- }
3837
- }
3838
- clear_last_error();
3839
- return getnameinfo_emulation(addr, addrlen,
3840
- host, hostlen, serv, servlen, flags, ec);
3841
- # endif
3842
- #elif !defined(BOOST_ASIO_HAS_GETADDRINFO)
3843
- using namespace std; // For memcpy.
3844
- sockaddr_storage_type tmp_addr;
3845
- memcpy(&tmp_addr, addr, addrlen);
3846
- addr = reinterpret_cast<socket_addr_type*>(&tmp_addr);
3847
- clear_last_error();
3848
- return getnameinfo_emulation(addr, addrlen,
3849
- host, hostlen, serv, servlen, flags, ec);
3850
- #else
3851
- clear_last_error();
3852
- int error = ::getnameinfo(addr, addrlen, host, hostlen, serv, servlen, flags);
3853
- return ec = translate_addrinfo_error(error);
3854
- #endif
3855
- }
3856
-
3857
- boost::system::error_code sync_getnameinfo(
3858
- const socket_addr_type* addr, std::size_t addrlen,
3859
- char* host, std::size_t hostlen, char* serv,
3860
- std::size_t servlen, int sock_type, boost::system::error_code& ec)
3861
- {
3862
- // First try resolving with the service name. If that fails try resolving
3863
- // but allow the service to be returned as a number.
3864
- int flags = (sock_type == SOCK_DGRAM) ? NI_DGRAM : 0;
3865
- socket_ops::getnameinfo(addr, addrlen, host,
3866
- hostlen, serv, servlen, flags, ec);
3867
- if (ec)
3868
- {
3869
- socket_ops::getnameinfo(addr, addrlen, host, hostlen,
3870
- serv, servlen, flags | NI_NUMERICSERV, ec);
3871
- }
3872
-
3873
- return ec;
3874
- }
3875
-
3876
- boost::system::error_code background_getnameinfo(
3877
- const weak_cancel_token_type& cancel_token,
3878
- const socket_addr_type* addr, std::size_t addrlen,
3879
- char* host, std::size_t hostlen, char* serv,
3880
- std::size_t servlen, int sock_type, boost::system::error_code& ec)
3881
- {
3882
- if (cancel_token.expired())
3883
- {
3884
- ec = boost::asio::error::operation_aborted;
3885
- }
3886
- else
3887
- {
3888
- // First try resolving with the service name. If that fails try resolving
3889
- // but allow the service to be returned as a number.
3890
- int flags = (sock_type == SOCK_DGRAM) ? NI_DGRAM : 0;
3891
- socket_ops::getnameinfo(addr, addrlen, host,
3892
- hostlen, serv, servlen, flags, ec);
3893
- if (ec)
3894
- {
3895
- socket_ops::getnameinfo(addr, addrlen, host, hostlen,
3896
- serv, servlen, flags | NI_NUMERICSERV, ec);
3897
- }
3898
- }
3899
-
3900
- return ec;
3901
- }
3902
-
3903
- #endif // !defined(BOOST_ASIO_WINDOWS_RUNTIME)
3904
-
3905
- u_long_type network_to_host_long(u_long_type value)
3906
- {
3907
- #if defined(BOOST_ASIO_WINDOWS_RUNTIME)
3908
- unsigned char* value_p = reinterpret_cast<unsigned char*>(&value);
3909
- u_long_type result = (static_cast<u_long_type>(value_p[0]) << 24)
3910
- | (static_cast<u_long_type>(value_p[1]) << 16)
3911
- | (static_cast<u_long_type>(value_p[2]) << 8)
3912
- | static_cast<u_long_type>(value_p[3]);
3913
- return result;
3914
- #else // defined(BOOST_ASIO_WINDOWS_RUNTIME)
3915
- return ntohl(value);
3916
- #endif // defined(BOOST_ASIO_WINDOWS_RUNTIME)
3917
- }
3918
-
3919
- u_long_type host_to_network_long(u_long_type value)
3920
- {
3921
- #if defined(BOOST_ASIO_WINDOWS_RUNTIME)
3922
- u_long_type result;
3923
- unsigned char* result_p = reinterpret_cast<unsigned char*>(&result);
3924
- result_p[0] = static_cast<unsigned char>((value >> 24) & 0xFF);
3925
- result_p[1] = static_cast<unsigned char>((value >> 16) & 0xFF);
3926
- result_p[2] = static_cast<unsigned char>((value >> 8) & 0xFF);
3927
- result_p[3] = static_cast<unsigned char>(value & 0xFF);
3928
- return result;
3929
- #else // defined(BOOST_ASIO_WINDOWS_RUNTIME)
3930
- return htonl(value);
3931
- #endif // defined(BOOST_ASIO_WINDOWS_RUNTIME)
3932
- }
3933
-
3934
- u_short_type network_to_host_short(u_short_type value)
3935
- {
3936
- #if defined(BOOST_ASIO_WINDOWS_RUNTIME)
3937
- unsigned char* value_p = reinterpret_cast<unsigned char*>(&value);
3938
- u_short_type result = (static_cast<u_short_type>(value_p[0]) << 8)
3939
- | static_cast<u_short_type>(value_p[1]);
3940
- return result;
3941
- #else // defined(BOOST_ASIO_WINDOWS_RUNTIME)
3942
- return ntohs(value);
3943
- #endif // defined(BOOST_ASIO_WINDOWS_RUNTIME)
3944
- }
3945
-
3946
- u_short_type host_to_network_short(u_short_type value)
3947
- {
3948
- #if defined(BOOST_ASIO_WINDOWS_RUNTIME)
3949
- u_short_type result;
3950
- unsigned char* result_p = reinterpret_cast<unsigned char*>(&result);
3951
- result_p[0] = static_cast<unsigned char>((value >> 8) & 0xFF);
3952
- result_p[1] = static_cast<unsigned char>(value & 0xFF);
3953
- return result;
3954
- #else // defined(BOOST_ASIO_WINDOWS_RUNTIME)
3955
- return htons(value);
3956
- #endif // defined(BOOST_ASIO_WINDOWS_RUNTIME)
3957
- }
3958
-
3959
- } // namespace socket_ops
3960
- } // namespace detail
3961
- } // namespace asio
3962
- } // namespace boost
3963
-
3964
- #include <boost/asio/detail/pop_options.hpp>
3965
-
3966
- #endif // BOOST_ASIO_DETAIL_SOCKET_OPS_IPP