passenger 2.2.9 → 2.2.10

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of passenger might be problematic. Click here for more details.

Files changed (435) hide show
  1. data/NEWS +10 -0
  2. data/doc/Architectural overview.html +202 -65
  3. data/doc/Security of user switching support.html +200 -63
  4. data/doc/Users guide Apache.html +266 -129
  5. data/doc/Users guide Nginx.html +234 -97
  6. data/doc/cxxapi/AbstractSpawnManager_8h-source.html +138 -0
  7. data/doc/cxxapi/Account_8h-source.html +202 -0
  8. data/doc/cxxapi/AccountsDatabase_8h-source.html +158 -0
  9. data/doc/cxxapi/AgentsStarter_8h-source.html +79 -0
  10. data/doc/cxxapi/BCrypt_8h-source.html +101 -0
  11. data/doc/cxxapi/BacktracesServer_8h-source.html +87 -0
  12. data/doc/cxxapi/Base64_8h-source.html +85 -0
  13. data/doc/cxxapi/Blowfish_8h-source.html +131 -0
  14. data/doc/cxxapi/Bucket_8h-source.html +1 -1
  15. data/doc/cxxapi/CachedFileStat_8h-source.html +49 -157
  16. data/doc/cxxapi/Configuration_8h-source.html +1 -1
  17. data/doc/cxxapi/Constants_8h-source.html +71 -0
  18. data/doc/cxxapi/ContentHandler_8h-source.html +92 -0
  19. data/doc/cxxapi/DirectoryMapper_8h-source.html +1 -1
  20. data/doc/cxxapi/Exceptions_8h-source.html +332 -236
  21. data/doc/cxxapi/FileChangeChecker_8h-source.html +237 -0
  22. data/doc/cxxapi/FileDescriptor_8h-source.html +206 -0
  23. data/doc/cxxapi/Hooks_8h-source.html +1 -1
  24. data/doc/cxxapi/HttpStatusExtractor_8h-source.html +378 -0
  25. data/doc/cxxapi/LoggingServer_8h-source.html +165 -0
  26. data/doc/cxxapi/Logging_8h-source.html +580 -112
  27. data/doc/cxxapi/MessageChannel_8h-source.html +789 -599
  28. data/doc/cxxapi/MessageClient_8h-source.html +297 -0
  29. data/doc/cxxapi/MessageServer_8h-source.html +607 -0
  30. data/doc/cxxapi/PoolOptions_8h-source.html +471 -278
  31. data/doc/cxxapi/Process_8h-source.html +272 -0
  32. data/doc/cxxapi/RandomGenerator_8h-source.html +156 -0
  33. data/doc/cxxapi/ResourceLocator_8h-source.html +104 -0
  34. data/doc/cxxapi/ScgiRequestParser_8h-source.html +399 -0
  35. data/doc/cxxapi/ServerInstanceDir_8h-source.html +356 -0
  36. data/doc/cxxapi/Session_8h-source.html +483 -0
  37. data/doc/cxxapi/SpawnManager_8h-source.html +590 -546
  38. data/doc/cxxapi/StaticContentHandler_8h-source.html +65 -0
  39. data/doc/cxxapi/StaticString_8h-source.html +214 -0
  40. data/doc/cxxapi/StringListCreator_8h-source.html +111 -0
  41. data/doc/cxxapi/SystemTime_8h-source.html +191 -78
  42. data/doc/cxxapi/Timer_8h-source.html +157 -0
  43. data/doc/cxxapi/Utils_8h-source.html +621 -434
  44. data/doc/cxxapi/Version_8h-source.html +59 -0
  45. data/doc/cxxapi/annotated.html +1 -1
  46. data/doc/cxxapi/apache2_2Configuration_8h-source.html +79 -0
  47. data/doc/cxxapi/classAgentWatcher-members.html +50 -0
  48. data/doc/cxxapi/classAgentWatcher.html +445 -0
  49. data/doc/cxxapi/classClient-members.html +4 -3
  50. data/doc/cxxapi/classClient.html +50 -46
  51. data/doc/cxxapi/classHooks-members.html +1 -1
  52. data/doc/cxxapi/classHooks.html +1 -1
  53. data/doc/cxxapi/classPassenger_1_1AbstractSpawnManager-members.html +37 -0
  54. data/doc/cxxapi/classPassenger_1_1AbstractSpawnManager.html +191 -0
  55. data/doc/cxxapi/classPassenger_1_1AbstractSpawnManager__inherit__graph.map +1 -0
  56. data/doc/cxxapi/classPassenger_1_1AbstractSpawnManager__inherit__graph.md5 +1 -0
  57. data/doc/cxxapi/classPassenger_1_1AbstractSpawnManager__inherit__graph.png +0 -0
  58. data/doc/cxxapi/{classPassenger_1_1DummySpawnManager-members.html → classPassenger_1_1ArgumentException-members.html} +3 -2
  59. data/doc/cxxapi/classPassenger_1_1ArgumentException.html +52 -0
  60. data/doc/cxxapi/classPassenger_1_1BacktracesServer-members.html +36 -0
  61. data/doc/cxxapi/classPassenger_1_1BacktracesServer.html +107 -0
  62. data/doc/cxxapi/classPassenger_1_1BacktracesServer__inherit__graph.map +1 -0
  63. data/doc/cxxapi/classPassenger_1_1BacktracesServer__inherit__graph.md5 +1 -0
  64. data/doc/cxxapi/classPassenger_1_1BacktracesServer__inherit__graph.png +0 -0
  65. data/doc/cxxapi/classPassenger_1_1BufferedUpload-members.html +3 -3
  66. data/doc/cxxapi/classPassenger_1_1BufferedUpload.html +18 -34
  67. data/doc/cxxapi/classPassenger_1_1BusyException-members.html +2 -1
  68. data/doc/cxxapi/classPassenger_1_1BusyException.html +3 -2
  69. data/doc/cxxapi/classPassenger_1_1ConfigurationException-members.html +2 -1
  70. data/doc/cxxapi/classPassenger_1_1ConfigurationException.html +3 -2
  71. data/doc/cxxapi/classPassenger_1_1DirectoryMapper-members.html +1 -1
  72. data/doc/cxxapi/classPassenger_1_1DirectoryMapper.html +1 -1
  73. data/doc/cxxapi/{classPassenger_1_1FileChecker-members.html → classPassenger_1_1EOFException-members.html} +3 -4
  74. data/doc/cxxapi/classPassenger_1_1EOFException.html +57 -0
  75. data/doc/cxxapi/classPassenger_1_1EOFException__inherit__graph.map +1 -0
  76. data/doc/cxxapi/classPassenger_1_1EOFException__inherit__graph.md5 +1 -0
  77. data/doc/cxxapi/classPassenger_1_1EOFException__inherit__graph.png +0 -0
  78. data/doc/cxxapi/classPassenger_1_1EventFd-members.html +33 -0
  79. data/doc/cxxapi/classPassenger_1_1EventFd.html +49 -0
  80. data/doc/cxxapi/classPassenger_1_1FileChangeChecker-members.html +37 -0
  81. data/doc/cxxapi/classPassenger_1_1FileChangeChecker.html +166 -0
  82. data/doc/cxxapi/classPassenger_1_1FileDescriptor-members.html +37 -0
  83. data/doc/cxxapi/classPassenger_1_1FileDescriptor.html +159 -0
  84. data/doc/cxxapi/classPassenger_1_1FileNotFoundException-members.html +2 -1
  85. data/doc/cxxapi/classPassenger_1_1FileNotFoundException.html +3 -2
  86. data/doc/cxxapi/classPassenger_1_1FileSystemException-members.html +2 -1
  87. data/doc/cxxapi/classPassenger_1_1FileSystemException.html +3 -2
  88. data/doc/cxxapi/{classPassenger_1_1ApplicationPoolServer-members.html → classPassenger_1_1HttpStatusExtractor-members.html} +6 -5
  89. data/doc/cxxapi/classPassenger_1_1HttpStatusExtractor.html +128 -0
  90. data/doc/cxxapi/classPassenger_1_1IOException-members.html +2 -1
  91. data/doc/cxxapi/classPassenger_1_1IOException.html +4 -3
  92. data/doc/cxxapi/classPassenger_1_1IOException__inherit__graph.map +2 -1
  93. data/doc/cxxapi/classPassenger_1_1IOException__inherit__graph.md5 +1 -1
  94. data/doc/cxxapi/classPassenger_1_1IOException__inherit__graph.png +0 -0
  95. data/doc/cxxapi/classPassenger_1_1MemZeroGuard-members.html +36 -0
  96. data/doc/cxxapi/classPassenger_1_1MemZeroGuard.html +147 -0
  97. data/doc/cxxapi/classPassenger_1_1MessageChannel-members.html +12 -5
  98. data/doc/cxxapi/classPassenger_1_1MessageChannel.html +267 -34
  99. data/doc/cxxapi/classPassenger_1_1MessageServer-members.html +46 -0
  100. data/doc/cxxapi/classPassenger_1_1MessageServer.html +438 -0
  101. data/doc/cxxapi/classPassenger_1_1MessageServer_1_1ClientContext-members.html +33 -0
  102. data/doc/cxxapi/classPassenger_1_1MessageServer_1_1ClientContext.html +56 -0
  103. data/doc/cxxapi/classPassenger_1_1MessageServer_1_1ClientContext__inherit__graph.map +1 -0
  104. data/doc/cxxapi/classPassenger_1_1MessageServer_1_1ClientContext__inherit__graph.md5 +1 -0
  105. data/doc/cxxapi/classPassenger_1_1MessageServer_1_1ClientContext__inherit__graph.png +0 -0
  106. data/doc/cxxapi/classPassenger_1_1MessageServer_1_1CommonClientContext-members.html +38 -0
  107. data/doc/cxxapi/classPassenger_1_1MessageServer_1_1CommonClientContext.html +175 -0
  108. data/doc/cxxapi/classPassenger_1_1MessageServer_1_1CommonClientContext__inherit__graph.map +1 -0
  109. data/doc/cxxapi/classPassenger_1_1MessageServer_1_1CommonClientContext__inherit__graph.md5 +1 -0
  110. data/doc/cxxapi/classPassenger_1_1MessageServer_1_1CommonClientContext__inherit__graph.png +0 -0
  111. data/doc/cxxapi/classPassenger_1_1MessageServer_1_1Handler-members.html +36 -0
  112. data/doc/cxxapi/classPassenger_1_1MessageServer_1_1Handler.html +176 -0
  113. data/doc/cxxapi/classPassenger_1_1MessageServer_1_1Handler__inherit__graph.map +1 -0
  114. data/doc/cxxapi/classPassenger_1_1MessageServer_1_1Handler__inherit__graph.md5 +1 -0
  115. data/doc/cxxapi/classPassenger_1_1MessageServer_1_1Handler__inherit__graph.png +0 -0
  116. data/doc/cxxapi/classPassenger_1_1Process-members.html +40 -0
  117. data/doc/cxxapi/classPassenger_1_1Process.html +266 -0
  118. data/doc/cxxapi/classPassenger_1_1RandomGenerator-members.html +33 -0
  119. data/doc/cxxapi/classPassenger_1_1RandomGenerator.html +51 -0
  120. data/doc/cxxapi/classPassenger_1_1RuntimeException-members.html +2 -1
  121. data/doc/cxxapi/classPassenger_1_1RuntimeException.html +3 -2
  122. data/doc/cxxapi/classPassenger_1_1ScgiRequestParser-members.html +47 -0
  123. data/doc/cxxapi/classPassenger_1_1ScgiRequestParser.html +302 -0
  124. data/doc/cxxapi/classPassenger_1_1SecurityException-members.html +33 -0
  125. data/doc/cxxapi/classPassenger_1_1SecurityException.html +52 -0
  126. data/doc/cxxapi/classPassenger_1_1Session-members.html +50 -0
  127. data/doc/cxxapi/classPassenger_1_1Session.html +577 -0
  128. data/doc/cxxapi/classPassenger_1_1Session__inherit__graph.map +1 -0
  129. data/doc/cxxapi/classPassenger_1_1Session__inherit__graph.md5 +1 -0
  130. data/doc/cxxapi/classPassenger_1_1Session__inherit__graph.png +0 -0
  131. data/doc/cxxapi/classPassenger_1_1SpawnException-members.html +2 -1
  132. data/doc/cxxapi/classPassenger_1_1SpawnException.html +5 -4
  133. data/doc/cxxapi/classPassenger_1_1SpawnManager-members.html +8 -5
  134. data/doc/cxxapi/classPassenger_1_1SpawnManager.html +127 -45
  135. data/doc/cxxapi/classPassenger_1_1SpawnManager__inherit__graph.map +1 -0
  136. data/doc/cxxapi/classPassenger_1_1SpawnManager__inherit__graph.md5 +1 -0
  137. data/doc/cxxapi/classPassenger_1_1SpawnManager__inherit__graph.png +0 -0
  138. data/doc/cxxapi/classPassenger_1_1StandardSession-members.html +51 -0
  139. data/doc/cxxapi/classPassenger_1_1StandardSession.html +415 -0
  140. data/doc/cxxapi/classPassenger_1_1StandardSession__inherit__graph.map +1 -0
  141. data/doc/cxxapi/classPassenger_1_1StandardSession__inherit__graph.md5 +1 -0
  142. data/doc/cxxapi/classPassenger_1_1StandardSession__inherit__graph.png +0 -0
  143. data/doc/cxxapi/classPassenger_1_1StaticString-members.html +33 -0
  144. data/doc/cxxapi/classPassenger_1_1StaticString.html +54 -0
  145. data/doc/cxxapi/classPassenger_1_1SystemException-members.html +2 -1
  146. data/doc/cxxapi/classPassenger_1_1SystemException.html +4 -3
  147. data/doc/cxxapi/classPassenger_1_1SystemException__inherit__graph.map +1 -0
  148. data/doc/cxxapi/classPassenger_1_1SystemException__inherit__graph.md5 +1 -1
  149. data/doc/cxxapi/classPassenger_1_1SystemException__inherit__graph.png +0 -0
  150. data/doc/cxxapi/classPassenger_1_1SystemTime-members.html +9 -1
  151. data/doc/cxxapi/classPassenger_1_1SystemTime.html +92 -8
  152. data/doc/cxxapi/classPassenger_1_1TimeRetrievalException-members.html +37 -0
  153. data/doc/cxxapi/classPassenger_1_1TimeRetrievalException.html +57 -0
  154. data/doc/cxxapi/classPassenger_1_1TimeRetrievalException__inherit__graph.map +1 -0
  155. data/doc/cxxapi/classPassenger_1_1TimeRetrievalException__inherit__graph.md5 +1 -0
  156. data/doc/cxxapi/classPassenger_1_1TimeRetrievalException__inherit__graph.png +0 -0
  157. data/doc/cxxapi/classPassenger_1_1TimeoutException-members.html +33 -0
  158. data/doc/cxxapi/classPassenger_1_1TimeoutException.html +50 -0
  159. data/doc/cxxapi/{classPassenger_1_1Application-members.html → classPassenger_1_1Timer-members.html} +8 -7
  160. data/doc/cxxapi/classPassenger_1_1Timer.html +163 -0
  161. data/doc/cxxapi/classServer-members.html +33 -0
  162. data/doc/cxxapi/classServer.html +46 -0
  163. data/doc/cxxapi/classServerInstanceDirToucher-members.html +33 -0
  164. data/doc/cxxapi/classServerInstanceDirToucher.html +43 -0
  165. data/doc/cxxapi/classes.html +1 -1
  166. data/doc/cxxapi/definitions_8h-source.html +1 -1
  167. data/doc/cxxapi/files.html +1 -1
  168. data/doc/cxxapi/functions.html +1 -1
  169. data/doc/cxxapi/{functions_type.html → functions_enum.html} +7 -5
  170. data/doc/cxxapi/functions_eval.html +55 -0
  171. data/doc/cxxapi/functions_func.html +1 -1
  172. data/doc/cxxapi/functions_vars.html +106 -9
  173. data/doc/cxxapi/graph_legend.html +1 -1
  174. data/doc/cxxapi/group__Configuration.html +1 -1
  175. data/doc/cxxapi/group__Core.html +1 -1
  176. data/doc/cxxapi/group__Exceptions.html +17 -1
  177. data/doc/cxxapi/group__Hooks.html +1 -1
  178. data/doc/cxxapi/group__Support.html +1 -1
  179. data/doc/cxxapi/hierarchy.html +34 -12
  180. data/doc/cxxapi/inherit__graph__0.map +1 -1
  181. data/doc/cxxapi/inherit__graph__0.md5 +1 -1
  182. data/doc/cxxapi/inherit__graph__0.png +0 -0
  183. data/doc/cxxapi/inherit__graph__1.map +1 -1
  184. data/doc/cxxapi/inherit__graph__1.md5 +1 -1
  185. data/doc/cxxapi/inherit__graph__1.png +0 -0
  186. data/doc/cxxapi/inherit__graph__10.map +1 -1
  187. data/doc/cxxapi/inherit__graph__10.md5 +1 -1
  188. data/doc/cxxapi/inherit__graph__10.png +0 -0
  189. data/doc/cxxapi/inherit__graph__11.map +1 -1
  190. data/doc/cxxapi/inherit__graph__11.md5 +1 -1
  191. data/doc/cxxapi/inherit__graph__11.png +0 -0
  192. data/doc/cxxapi/inherit__graph__12.map +1 -1
  193. data/doc/cxxapi/inherit__graph__12.md5 +1 -1
  194. data/doc/cxxapi/inherit__graph__12.png +0 -0
  195. data/doc/cxxapi/inherit__graph__13.map +1 -1
  196. data/doc/cxxapi/inherit__graph__13.md5 +1 -1
  197. data/doc/cxxapi/inherit__graph__13.png +0 -0
  198. data/doc/cxxapi/inherit__graph__14.map +3 -2
  199. data/doc/cxxapi/inherit__graph__14.md5 +1 -1
  200. data/doc/cxxapi/inherit__graph__14.png +0 -0
  201. data/doc/cxxapi/inherit__graph__15.map +1 -1
  202. data/doc/cxxapi/inherit__graph__15.md5 +1 -1
  203. data/doc/cxxapi/inherit__graph__15.png +0 -0
  204. data/doc/cxxapi/inherit__graph__16.map +1 -1
  205. data/doc/cxxapi/inherit__graph__16.md5 +1 -1
  206. data/doc/cxxapi/inherit__graph__16.png +0 -0
  207. data/doc/cxxapi/inherit__graph__17.map +1 -1
  208. data/doc/cxxapi/inherit__graph__17.md5 +1 -1
  209. data/doc/cxxapi/inherit__graph__17.png +0 -0
  210. data/doc/cxxapi/inherit__graph__18.map +2 -1
  211. data/doc/cxxapi/inherit__graph__18.md5 +1 -1
  212. data/doc/cxxapi/inherit__graph__18.png +0 -0
  213. data/doc/cxxapi/inherit__graph__19.map +1 -1
  214. data/doc/cxxapi/inherit__graph__19.md5 +1 -1
  215. data/doc/cxxapi/inherit__graph__19.png +0 -0
  216. data/doc/cxxapi/inherit__graph__2.map +1 -1
  217. data/doc/cxxapi/inherit__graph__2.md5 +1 -1
  218. data/doc/cxxapi/inherit__graph__2.png +0 -0
  219. data/doc/cxxapi/inherit__graph__20.map +1 -2
  220. data/doc/cxxapi/inherit__graph__20.md5 +1 -1
  221. data/doc/cxxapi/inherit__graph__20.png +0 -0
  222. data/doc/cxxapi/inherit__graph__21.map +1 -1
  223. data/doc/cxxapi/inherit__graph__21.md5 +1 -1
  224. data/doc/cxxapi/inherit__graph__21.png +0 -0
  225. data/doc/cxxapi/inherit__graph__22.map +1 -0
  226. data/doc/cxxapi/inherit__graph__22.md5 +1 -0
  227. data/doc/cxxapi/inherit__graph__22.png +0 -0
  228. data/doc/cxxapi/inherit__graph__23.map +1 -0
  229. data/doc/cxxapi/inherit__graph__23.md5 +1 -0
  230. data/doc/cxxapi/inherit__graph__23.png +0 -0
  231. data/doc/cxxapi/inherit__graph__24.map +1 -0
  232. data/doc/cxxapi/inherit__graph__24.md5 +1 -0
  233. data/doc/cxxapi/inherit__graph__24.png +0 -0
  234. data/doc/cxxapi/inherit__graph__25.map +1 -0
  235. data/doc/cxxapi/inherit__graph__25.md5 +1 -0
  236. data/doc/cxxapi/inherit__graph__25.png +0 -0
  237. data/doc/cxxapi/inherit__graph__26.map +1 -0
  238. data/doc/cxxapi/inherit__graph__26.md5 +1 -0
  239. data/doc/cxxapi/inherit__graph__26.png +0 -0
  240. data/doc/cxxapi/inherit__graph__27.map +2 -0
  241. data/doc/cxxapi/inherit__graph__27.md5 +1 -0
  242. data/doc/cxxapi/inherit__graph__27.png +0 -0
  243. data/doc/cxxapi/inherit__graph__28.map +1 -0
  244. data/doc/cxxapi/inherit__graph__28.md5 +1 -0
  245. data/doc/cxxapi/inherit__graph__28.png +0 -0
  246. data/doc/cxxapi/inherit__graph__29.map +1 -0
  247. data/doc/cxxapi/inherit__graph__29.md5 +1 -0
  248. data/doc/cxxapi/inherit__graph__29.png +0 -0
  249. data/doc/cxxapi/inherit__graph__3.map +2 -1
  250. data/doc/cxxapi/inherit__graph__3.md5 +1 -1
  251. data/doc/cxxapi/inherit__graph__3.png +0 -0
  252. data/doc/cxxapi/inherit__graph__30.map +1 -0
  253. data/doc/cxxapi/inherit__graph__30.md5 +1 -0
  254. data/doc/cxxapi/inherit__graph__30.png +0 -0
  255. data/doc/cxxapi/inherit__graph__31.map +3 -0
  256. data/doc/cxxapi/inherit__graph__31.md5 +1 -0
  257. data/doc/cxxapi/inherit__graph__31.png +0 -0
  258. data/doc/cxxapi/inherit__graph__32.map +1 -0
  259. data/doc/cxxapi/inherit__graph__32.md5 +1 -0
  260. data/doc/cxxapi/inherit__graph__32.png +0 -0
  261. data/doc/cxxapi/inherit__graph__33.map +1 -0
  262. data/doc/cxxapi/inherit__graph__33.md5 +1 -0
  263. data/doc/cxxapi/inherit__graph__33.png +0 -0
  264. data/doc/cxxapi/inherit__graph__34.map +1 -0
  265. data/doc/cxxapi/inherit__graph__34.md5 +1 -0
  266. data/doc/cxxapi/inherit__graph__34.png +0 -0
  267. data/doc/cxxapi/inherit__graph__35.map +1 -0
  268. data/doc/cxxapi/inherit__graph__35.md5 +1 -0
  269. data/doc/cxxapi/inherit__graph__35.png +0 -0
  270. data/doc/cxxapi/inherit__graph__36.map +1 -0
  271. data/doc/cxxapi/inherit__graph__36.md5 +1 -0
  272. data/doc/cxxapi/inherit__graph__36.png +0 -0
  273. data/doc/cxxapi/inherit__graph__4.map +1 -1
  274. data/doc/cxxapi/inherit__graph__4.md5 +1 -1
  275. data/doc/cxxapi/inherit__graph__4.png +0 -0
  276. data/doc/cxxapi/inherit__graph__5.map +1 -1
  277. data/doc/cxxapi/inherit__graph__5.md5 +1 -1
  278. data/doc/cxxapi/inherit__graph__5.png +0 -0
  279. data/doc/cxxapi/inherit__graph__6.map +1 -2
  280. data/doc/cxxapi/inherit__graph__6.md5 +1 -1
  281. data/doc/cxxapi/inherit__graph__6.png +0 -0
  282. data/doc/cxxapi/inherit__graph__7.map +1 -1
  283. data/doc/cxxapi/inherit__graph__7.md5 +1 -1
  284. data/doc/cxxapi/inherit__graph__7.png +0 -0
  285. data/doc/cxxapi/inherit__graph__8.map +1 -1
  286. data/doc/cxxapi/inherit__graph__8.md5 +1 -1
  287. data/doc/cxxapi/inherit__graph__8.png +0 -0
  288. data/doc/cxxapi/inherit__graph__9.map +1 -1
  289. data/doc/cxxapi/inherit__graph__9.md5 +1 -1
  290. data/doc/cxxapi/inherit__graph__9.png +0 -0
  291. data/doc/cxxapi/inherits.html +81 -41
  292. data/doc/cxxapi/main.html +1 -1
  293. data/doc/cxxapi/md5_8h-source.html +121 -0
  294. data/doc/cxxapi/modules.html +1 -1
  295. data/doc/cxxapi/namespacePassenger.html +651 -0
  296. data/doc/cxxapi/namespacemembers.html +155 -0
  297. data/doc/cxxapi/namespacemembers_enum.html +46 -0
  298. data/doc/cxxapi/namespacemembers_eval.html +52 -0
  299. data/doc/cxxapi/namespacemembers_func.html +139 -0
  300. data/doc/cxxapi/namespacemembers_type.html +50 -0
  301. data/doc/cxxapi/namespaces.html +34 -0
  302. data/doc/cxxapi/nginx_2Configuration_8h-source.html +114 -0
  303. data/doc/cxxapi/ngx__http__passenger__module_8h-source.html +91 -0
  304. data/doc/cxxapi/structPassenger_1_1AnythingToString-members.html +2 -1
  305. data/doc/cxxapi/structPassenger_1_1AnythingToString.html +3 -2
  306. data/doc/cxxapi/structPassenger_1_1AnythingToString_3_01vector_3_01string_01_4_01_4-members.html +2 -1
  307. data/doc/cxxapi/structPassenger_1_1AnythingToString_3_01vector_3_01string_01_4_01_4.html +3 -2
  308. data/doc/cxxapi/structPassenger_1_1MessageServer_1_1DisconnectEventBroadcastGuard-members.html +33 -0
  309. data/doc/cxxapi/structPassenger_1_1MessageServer_1_1DisconnectEventBroadcastGuard.html +49 -0
  310. data/doc/cxxapi/structPassenger_1_1PoolOptions-members.html +19 -7
  311. data/doc/cxxapi/structPassenger_1_1PoolOptions.html +323 -53
  312. data/doc/cxxapi/structPassenger_1_1StaticString_1_1Hash-members.html +33 -0
  313. data/doc/cxxapi/structPassenger_1_1StaticString_1_1Hash.html +49 -0
  314. data/ext/common/MessageChannel.h +48 -4
  315. data/ext/common/Version.h +1 -1
  316. data/ext/nginx/HttpStatusExtractor.h +1 -0
  317. data/ext/nginx/ScgiRequestParser.h +1 -0
  318. data/ext/phusion_passenger/native_support.c +5 -1
  319. data/lib/phusion_passenger/constants.rb +1 -1
  320. data/lib/phusion_passenger/message_channel.rb +45 -3
  321. data/lib/phusion_passenger/rack/application_spawner.rb +4 -0
  322. data/lib/phusion_passenger/railz/application_spawner.rb +19 -1
  323. data/lib/phusion_passenger/utils.rb +3 -3
  324. data/lib/phusion_passenger/utils/rewindable_input.rb +5 -0
  325. data/test/MessageChannelTest.cpp +9 -1
  326. data/test/stub/message_channel.rb +1 -1
  327. data/test/stub/message_channel_2.rb +1 -1
  328. data/test/stub/message_channel_3.rb +2 -2
  329. metadata +173 -113
  330. data/doc/cxxapi/ApplicationPoolServer_8h-source.html +0 -833
  331. data/doc/cxxapi/ApplicationPool_8h-source.html +0 -226
  332. data/doc/cxxapi/Application_8h-source.html +0 -553
  333. data/doc/cxxapi/DummySpawnManager_8h-source.html +0 -130
  334. data/doc/cxxapi/FileChecker_8h-source.html +0 -134
  335. data/doc/cxxapi/StandardApplicationPool_8h-source.html +0 -842
  336. data/doc/cxxapi/classPassenger_1_1Application.html +0 -231
  337. data/doc/cxxapi/classPassenger_1_1ApplicationPool-members.html +0 -41
  338. data/doc/cxxapi/classPassenger_1_1ApplicationPool.html +0 -323
  339. data/doc/cxxapi/classPassenger_1_1ApplicationPoolServer.html +0 -227
  340. data/doc/cxxapi/classPassenger_1_1ApplicationPool__inherit__graph.map +0 -1
  341. data/doc/cxxapi/classPassenger_1_1ApplicationPool__inherit__graph.md5 +0 -1
  342. data/doc/cxxapi/classPassenger_1_1ApplicationPool__inherit__graph.png +0 -0
  343. data/doc/cxxapi/classPassenger_1_1Application_1_1Session-members.html +0 -44
  344. data/doc/cxxapi/classPassenger_1_1Application_1_1Session.html +0 -403
  345. data/doc/cxxapi/classPassenger_1_1DummySpawnManager.html +0 -53
  346. data/doc/cxxapi/classPassenger_1_1FileChecker.html +0 -124
  347. data/doc/cxxapi/classPassenger_1_1StandardApplicationPool-members.html +0 -44
  348. data/doc/cxxapi/classPassenger_1_1StandardApplicationPool.html +0 -342
  349. data/doc/cxxapi/classPassenger_1_1StandardApplicationPool__inherit__graph.map +0 -1
  350. data/doc/cxxapi/classPassenger_1_1StandardApplicationPool__inherit__graph.md5 +0 -1
  351. data/doc/cxxapi/classPassenger_1_1StandardApplicationPool__inherit__graph.png +0 -0
  352. data/doc/rdoc/classes/ConditionVariable.html +0 -194
  353. data/doc/rdoc/classes/Exception.html +0 -120
  354. data/doc/rdoc/classes/GC.html +0 -113
  355. data/doc/rdoc/classes/IO.html +0 -169
  356. data/doc/rdoc/classes/PhusionPassenger.html +0 -239
  357. data/doc/rdoc/classes/PhusionPassenger/AbstractInstaller.html +0 -153
  358. data/doc/rdoc/classes/PhusionPassenger/AbstractRequestHandler.html +0 -517
  359. data/doc/rdoc/classes/PhusionPassenger/AbstractServer.html +0 -719
  360. data/doc/rdoc/classes/PhusionPassenger/AbstractServer/ServerAlreadyStarted.html +0 -97
  361. data/doc/rdoc/classes/PhusionPassenger/AbstractServer/ServerError.html +0 -96
  362. data/doc/rdoc/classes/PhusionPassenger/AbstractServer/ServerNotStarted.html +0 -97
  363. data/doc/rdoc/classes/PhusionPassenger/AbstractServer/UnknownMessage.html +0 -96
  364. data/doc/rdoc/classes/PhusionPassenger/AbstractServerCollection.html +0 -598
  365. data/doc/rdoc/classes/PhusionPassenger/AdminTools.html +0 -140
  366. data/doc/rdoc/classes/PhusionPassenger/AdminTools/ControlProcess.html +0 -317
  367. data/doc/rdoc/classes/PhusionPassenger/AdminTools/ControlProcess/Instance.html +0 -138
  368. data/doc/rdoc/classes/PhusionPassenger/AppInitError.html +0 -154
  369. data/doc/rdoc/classes/PhusionPassenger/Application.html +0 -283
  370. data/doc/rdoc/classes/PhusionPassenger/ConsoleTextTemplate.html +0 -172
  371. data/doc/rdoc/classes/PhusionPassenger/FrameworkInitError.html +0 -145
  372. data/doc/rdoc/classes/PhusionPassenger/HTMLTemplate.html +0 -175
  373. data/doc/rdoc/classes/PhusionPassenger/InitializationError.html +0 -141
  374. data/doc/rdoc/classes/PhusionPassenger/InvalidPath.html +0 -92
  375. data/doc/rdoc/classes/PhusionPassenger/MessageChannel.html +0 -489
  376. data/doc/rdoc/classes/PhusionPassenger/NativeSupport.html +0 -350
  377. data/doc/rdoc/classes/PhusionPassenger/Rack.html +0 -91
  378. data/doc/rdoc/classes/PhusionPassenger/Rack/ApplicationSpawner.html +0 -188
  379. data/doc/rdoc/classes/PhusionPassenger/Rack/RequestHandler.html +0 -199
  380. data/doc/rdoc/classes/PhusionPassenger/Railz.html +0 -95
  381. data/doc/rdoc/classes/PhusionPassenger/Railz/ApplicationSpawner.html +0 -438
  382. data/doc/rdoc/classes/PhusionPassenger/Railz/ApplicationSpawner/Error.html +0 -98
  383. data/doc/rdoc/classes/PhusionPassenger/Railz/CGIFixed.html +0 -200
  384. data/doc/rdoc/classes/PhusionPassenger/Railz/FrameworkSpawner.html +0 -436
  385. data/doc/rdoc/classes/PhusionPassenger/Railz/FrameworkSpawner/Error.html +0 -98
  386. data/doc/rdoc/classes/PhusionPassenger/Railz/RequestHandler.html +0 -155
  387. data/doc/rdoc/classes/PhusionPassenger/SpawnManager.html +0 -402
  388. data/doc/rdoc/classes/PhusionPassenger/UnknownError.html +0 -125
  389. data/doc/rdoc/classes/PhusionPassenger/Utils.html +0 -805
  390. data/doc/rdoc/classes/PhusionPassenger/Utils/PseudoIO.html +0 -169
  391. data/doc/rdoc/classes/PhusionPassenger/Utils/RewindableInput.html +0 -247
  392. data/doc/rdoc/classes/PhusionPassenger/Utils/RewindableInput/Tempfile.html +0 -120
  393. data/doc/rdoc/classes/PhusionPassenger/VersionNotFound.html +0 -140
  394. data/doc/rdoc/classes/PhusionPassenger/WSGI.html +0 -89
  395. data/doc/rdoc/classes/PhusionPassenger/WSGI/ApplicationSpawner.html +0 -188
  396. data/doc/rdoc/classes/PlatformInfo.html +0 -866
  397. data/doc/rdoc/classes/RakeExtensions.html +0 -197
  398. data/doc/rdoc/classes/Signal.html +0 -139
  399. data/doc/rdoc/created.rid +0 -1
  400. data/doc/rdoc/files/DEVELOPERS_TXT.html +0 -255
  401. data/doc/rdoc/files/README.html +0 -157
  402. data/doc/rdoc/files/ext/phusion_passenger/native_support_c.html +0 -92
  403. data/doc/rdoc/files/lib/phusion_passenger/abstract_installer_rb.html +0 -129
  404. data/doc/rdoc/files/lib/phusion_passenger/abstract_request_handler_rb.html +0 -129
  405. data/doc/rdoc/files/lib/phusion_passenger/abstract_server_collection_rb.html +0 -126
  406. data/doc/rdoc/files/lib/phusion_passenger/abstract_server_rb.html +0 -128
  407. data/doc/rdoc/files/lib/phusion_passenger/admin_tools/control_process_rb.html +0 -130
  408. data/doc/rdoc/files/lib/phusion_passenger/admin_tools_rb.html +0 -122
  409. data/doc/rdoc/files/lib/phusion_passenger/application_rb.html +0 -127
  410. data/doc/rdoc/files/lib/phusion_passenger/console_text_template_rb.html +0 -126
  411. data/doc/rdoc/files/lib/phusion_passenger/constants_rb.html +0 -122
  412. data/doc/rdoc/files/lib/phusion_passenger/dependencies_rb.html +0 -134
  413. data/doc/rdoc/files/lib/phusion_passenger/events_rb.html +0 -122
  414. data/doc/rdoc/files/lib/phusion_passenger/exceptions_rb.html +0 -122
  415. data/doc/rdoc/files/lib/phusion_passenger/html_template_rb.html +0 -126
  416. data/doc/rdoc/files/lib/phusion_passenger/message_channel_rb.html +0 -120
  417. data/doc/rdoc/files/lib/phusion_passenger/packaging_rb.html +0 -122
  418. data/doc/rdoc/files/lib/phusion_passenger/platform_info_rb.html +0 -127
  419. data/doc/rdoc/files/lib/phusion_passenger/rack/application_spawner_rb.html +0 -133
  420. data/doc/rdoc/files/lib/phusion_passenger/rack/request_handler_rb.html +0 -125
  421. data/doc/rdoc/files/lib/phusion_passenger/railz/application_spawner_rb.html +0 -140
  422. data/doc/rdoc/files/lib/phusion_passenger/railz/cgi_fixed_rb.html +0 -126
  423. data/doc/rdoc/files/lib/phusion_passenger/railz/framework_spawner_rb.html +0 -145
  424. data/doc/rdoc/files/lib/phusion_passenger/railz/request_handler_rb.html +0 -125
  425. data/doc/rdoc/files/lib/phusion_passenger/simple_benchmarking_rb.html +0 -122
  426. data/doc/rdoc/files/lib/phusion_passenger/spawn_manager_rb.html +0 -159
  427. data/doc/rdoc/files/lib/phusion_passenger/utils/rewindable_input_rb.html +0 -100
  428. data/doc/rdoc/files/lib/phusion_passenger/utils_rb.html +0 -174
  429. data/doc/rdoc/files/lib/phusion_passenger/wsgi/application_spawner_rb.html +0 -129
  430. data/doc/rdoc/files/misc/rake/extensions_rb.html +0 -130
  431. data/doc/rdoc/fr_class_index.html +0 -93
  432. data/doc/rdoc/fr_file_index.html +0 -77
  433. data/doc/rdoc/fr_method_index.html +0 -212
  434. data/doc/rdoc/index.html +0 -26
  435. data/doc/rdoc/rdoc-style.css +0 -187
@@ -10,6 +10,7 @@
10
10
  <ul>
11
11
  <li><a href="main.html"><span>Main&nbsp;Page</span></a></li>
12
12
  <li><a href="modules.html"><span>Modules</span></a></li>
13
+ <li><a href="namespaces.html"><span>Namespaces</span></a></li>
13
14
  <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
14
15
  <li><a href="files.html"><span>Files</span></a></li>
15
16
  </ul>
@@ -25,25 +26,31 @@
25
26
  <div class="contents">
26
27
  <h1>Passenger::MessageChannel Member List</h1>This is the complete list of members for <a class="el" href="classPassenger_1_1MessageChannel.html">Passenger::MessageChannel</a>, including all inherited members.<p><table>
27
28
  <tr class="memlist"><td><a class="el" href="classPassenger_1_1MessageChannel.html#06309e208fc5e10642a2e9bbe0f351eb">close</a>()</td><td><a class="el" href="classPassenger_1_1MessageChannel.html">Passenger::MessageChannel</a></td><td><code> [inline]</code></td></tr>
29
+ <tr class="memlist"><td><a class="el" href="classPassenger_1_1MessageChannel.html#a5ee9617bb17bdeaba30b757ecffa1b5">connected</a>() const </td><td><a class="el" href="classPassenger_1_1MessageChannel.html">Passenger::MessageChannel</a></td><td><code> [inline]</code></td></tr>
30
+ <tr class="memlist"><td><a class="el" href="classPassenger_1_1MessageChannel.html#0b1e25dd75783d9753f8a0d1dd42606a">filenum</a>() const </td><td><a class="el" href="classPassenger_1_1MessageChannel.html">Passenger::MessageChannel</a></td><td><code> [inline]</code></td></tr>
28
31
  <tr class="memlist"><td><a class="el" href="classPassenger_1_1MessageChannel.html#73e7c9a8e421d29558838176aff02ca4">MessageChannel</a>()</td><td><a class="el" href="classPassenger_1_1MessageChannel.html">Passenger::MessageChannel</a></td><td><code> [inline]</code></td></tr>
29
32
  <tr class="memlist"><td><a class="el" href="classPassenger_1_1MessageChannel.html#486b6e74c4d0973eefbcfde65f898ca7">MessageChannel</a>(int fd)</td><td><a class="el" href="classPassenger_1_1MessageChannel.html">Passenger::MessageChannel</a></td><td><code> [inline]</code></td></tr>
30
33
  <tr class="memlist"><td><a class="el" href="classPassenger_1_1MessageChannel.html#129659b60d1a663337873d2af944431e">read</a>(vector&lt; string &gt; &amp;args)</td><td><a class="el" href="classPassenger_1_1MessageChannel.html">Passenger::MessageChannel</a></td><td><code> [inline]</code></td></tr>
31
- <tr class="memlist"><td><a class="el" href="classPassenger_1_1MessageChannel.html#1561b7e4a0f4d39ea431f456e5655488">readFileDescriptor</a>()</td><td><a class="el" href="classPassenger_1_1MessageChannel.html">Passenger::MessageChannel</a></td><td><code> [inline]</code></td></tr>
32
- <tr class="memlist"><td><a class="el" href="classPassenger_1_1MessageChannel.html#cd1d1bd1cc787784c8b54f5471fff479">readRaw</a>(void *buf, unsigned int size)</td><td><a class="el" href="classPassenger_1_1MessageChannel.html">Passenger::MessageChannel</a></td><td><code> [inline]</code></td></tr>
33
- <tr class="memlist"><td><a class="el" href="classPassenger_1_1MessageChannel.html#4ce6a0e751b5e3563bee583c231569bc">readScalar</a>(string &amp;output)</td><td><a class="el" href="classPassenger_1_1MessageChannel.html">Passenger::MessageChannel</a></td><td><code> [inline]</code></td></tr>
34
+ <tr class="memlist"><td><a class="el" href="classPassenger_1_1MessageChannel.html#1a28ba9d078f38f2831673092ac9dcbc">readFileDescriptor</a>(bool negotiate=true)</td><td><a class="el" href="classPassenger_1_1MessageChannel.html">Passenger::MessageChannel</a></td><td><code> [inline]</code></td></tr>
35
+ <tr class="memlist"><td><a class="el" href="classPassenger_1_1MessageChannel.html#b471dc1888f030e20ed23068a160ec2a">readRaw</a>(void *buf, unsigned int size, unsigned long long *timeout=NULL)</td><td><a class="el" href="classPassenger_1_1MessageChannel.html">Passenger::MessageChannel</a></td><td><code> [inline]</code></td></tr>
36
+ <tr class="memlist"><td><a class="el" href="classPassenger_1_1MessageChannel.html#1f3cf672b566166ed920c2bba4d19604">readScalar</a>(string &amp;output, unsigned int maxSize=0, unsigned long long *timeout=NULL)</td><td><a class="el" href="classPassenger_1_1MessageChannel.html">Passenger::MessageChannel</a></td><td><code> [inline]</code></td></tr>
37
+ <tr class="memlist"><td><a class="el" href="classPassenger_1_1MessageChannel.html#7b0c67852ea8ab455af75b1037c7f8b6">readUint32</a>(unsigned int &amp;value, unsigned long long *timeout=NULL)</td><td><a class="el" href="classPassenger_1_1MessageChannel.html">Passenger::MessageChannel</a></td><td><code> [inline]</code></td></tr>
34
38
  <tr class="memlist"><td><a class="el" href="classPassenger_1_1MessageChannel.html#eb69bffbbb148c9bc8662e20b416c4e2">setReadTimeout</a>(unsigned int msec)</td><td><a class="el" href="classPassenger_1_1MessageChannel.html">Passenger::MessageChannel</a></td><td><code> [inline]</code></td></tr>
35
39
  <tr class="memlist"><td><a class="el" href="classPassenger_1_1MessageChannel.html#77c5d7c47f387cf43992ebeb14e3c6c7">setWriteTimeout</a>(unsigned int msec)</td><td><a class="el" href="classPassenger_1_1MessageChannel.html">Passenger::MessageChannel</a></td><td><code> [inline]</code></td></tr>
40
+ <tr class="memlist"><td><a class="el" href="classPassenger_1_1MessageChannel.html#c2407ed109785b49794989507c570149">waitUntilReadable</a>(unsigned long long *timeout)</td><td><a class="el" href="classPassenger_1_1MessageChannel.html">Passenger::MessageChannel</a></td><td><code> [inline]</code></td></tr>
36
41
  <tr class="memlist"><td><a class="el" href="classPassenger_1_1MessageChannel.html#150f68bc47e060dcc6ca35bee047914d">write</a>(const StringArrayType &amp;args)</td><td><a class="el" href="classPassenger_1_1MessageChannel.html">Passenger::MessageChannel</a></td><td><code> [inline]</code></td></tr>
37
42
  <tr class="memlist"><td><a class="el" href="classPassenger_1_1MessageChannel.html#9ad7a978cf8409e01ab2f0a2b6be5a0a">write</a>(const list&lt; string &gt; &amp;args)</td><td><a class="el" href="classPassenger_1_1MessageChannel.html">Passenger::MessageChannel</a></td><td><code> [inline]</code></td></tr>
38
43
  <tr class="memlist"><td><a class="el" href="classPassenger_1_1MessageChannel.html#6a9bc5d72715cb7ba0e437c8851ef487">write</a>(const vector&lt; string &gt; &amp;args)</td><td><a class="el" href="classPassenger_1_1MessageChannel.html">Passenger::MessageChannel</a></td><td><code> [inline]</code></td></tr>
44
+ <tr class="memlist"><td><a class="el" href="classPassenger_1_1MessageChannel.html#70cc924c1ce7e2cedcbab61155d3aec9">write</a>(const char *name, va_list &amp;ap)</td><td><a class="el" href="classPassenger_1_1MessageChannel.html">Passenger::MessageChannel</a></td><td><code> [inline]</code></td></tr>
39
45
  <tr class="memlist"><td><a class="el" href="classPassenger_1_1MessageChannel.html#12cce3364023eacbe4fe09006cf3d38d">write</a>(const char *name,...)</td><td><a class="el" href="classPassenger_1_1MessageChannel.html">Passenger::MessageChannel</a></td><td><code> [inline]</code></td></tr>
40
- <tr class="memlist"><td><a class="el" href="classPassenger_1_1MessageChannel.html#73e3f3cda384c085a2af0e820ccd3e98">writeFileDescriptor</a>(int fileDescriptor)</td><td><a class="el" href="classPassenger_1_1MessageChannel.html">Passenger::MessageChannel</a></td><td><code> [inline]</code></td></tr>
46
+ <tr class="memlist"><td><a class="el" href="classPassenger_1_1MessageChannel.html#e0c558e07dcc91900016773b2bec38d8">writeFileDescriptor</a>(int fileDescriptor, bool negotiate=true)</td><td><a class="el" href="classPassenger_1_1MessageChannel.html">Passenger::MessageChannel</a></td><td><code> [inline]</code></td></tr>
41
47
  <tr class="memlist"><td><a class="el" href="classPassenger_1_1MessageChannel.html#069314e4c7e1fe8c8ab36e16d2cc5fef">writeRaw</a>(const char *data, unsigned int size)</td><td><a class="el" href="classPassenger_1_1MessageChannel.html">Passenger::MessageChannel</a></td><td><code> [inline]</code></td></tr>
42
48
  <tr class="memlist"><td><a class="el" href="classPassenger_1_1MessageChannel.html#cfa38f4f0e22ec16350b8cc159e8e364">writeRaw</a>(const string &amp;data)</td><td><a class="el" href="classPassenger_1_1MessageChannel.html">Passenger::MessageChannel</a></td><td><code> [inline]</code></td></tr>
43
49
  <tr class="memlist"><td><a class="el" href="classPassenger_1_1MessageChannel.html#44e01a783c48abadeea0d915b9893bfb">writeScalar</a>(const string &amp;str)</td><td><a class="el" href="classPassenger_1_1MessageChannel.html">Passenger::MessageChannel</a></td><td><code> [inline]</code></td></tr>
44
50
  <tr class="memlist"><td><a class="el" href="classPassenger_1_1MessageChannel.html#80977020ef895f3ea790c5d28a333dda">writeScalar</a>(const char *data, unsigned int size)</td><td><a class="el" href="classPassenger_1_1MessageChannel.html">Passenger::MessageChannel</a></td><td><code> [inline]</code></td></tr>
51
+ <tr class="memlist"><td><a class="el" href="classPassenger_1_1MessageChannel.html#bf02c51a74477650de8d5d5db661063b">writeUint32</a>(unsigned int value)</td><td><a class="el" href="classPassenger_1_1MessageChannel.html">Passenger::MessageChannel</a></td><td><code> [inline]</code></td></tr>
45
52
  </table></div>
46
- <hr size="1"><address style="text-align: right;"><small>Generated on Wed Apr 8 22:35:12 2009 for Passenger by&nbsp;
53
+ <hr size="1"><address style="text-align: right;"><small>Generated on Sun Feb 21 12:22:48 2010 for Passenger by&nbsp;
47
54
  <a href="http://www.doxygen.org/index.html">
48
55
  <img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
49
56
  </body>
@@ -10,6 +10,7 @@
10
10
  <ul>
11
11
  <li><a href="main.html"><span>Main&nbsp;Page</span></a></li>
12
12
  <li><a href="modules.html"><span>Modules</span></a></li>
13
+ <li><a href="namespaces.html"><span>Namespaces</span></a></li>
13
14
  <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
14
15
  <li><a href="files.html"><span>Files</span></a></li>
15
16
  </ul>
@@ -21,7 +22,7 @@
21
22
  <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
22
23
  </ul>
23
24
  </div>
24
- <div class="navpath"><b>Passenger</b>::<a class="el" href="classPassenger_1_1MessageChannel.html">MessageChannel</a>
25
+ <div class="navpath"><a class="el" href="namespacePassenger.html">Passenger</a>::<a class="el" href="classPassenger_1_1MessageChannel.html">MessageChannel</a>
25
26
  </div>
26
27
  </div>
27
28
  <div class="contents">
@@ -45,6 +46,13 @@
45
46
  &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1MessageChannel.html#486b6e74c4d0973eefbcfde65f898ca7">MessageChannel</a> (int fd)</td></tr>
46
47
 
47
48
  <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Construct a new <a class="el" href="classPassenger_1_1MessageChannel.html" title="Convenience class for I/O operations on file descriptors.">MessageChannel</a> with the given file descriptor. <br></td></tr>
49
+ <tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1MessageChannel.html#0b1e25dd75783d9753f8a0d1dd42606a">filenum</a> () const </td></tr>
50
+
51
+ <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the underlying file descriptor. <a href="#0b1e25dd75783d9753f8a0d1dd42606a"></a><br></td></tr>
52
+ <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a5ee9617bb17bdeaba30b757ecffa1b5"></a><!-- doxytag: member="Passenger::MessageChannel::connected" ref="a5ee9617bb17bdeaba30b757ecffa1b5" args="() const " -->
53
+ bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1MessageChannel.html#a5ee9617bb17bdeaba30b757ecffa1b5">connected</a> () const </td></tr>
54
+
55
+ <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns whether <a class="el" href="classPassenger_1_1MessageChannel.html#06309e208fc5e10642a2e9bbe0f351eb" title="Close the underlying file descriptor.">close()</a> has been called. <br></td></tr>
48
56
  <tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1MessageChannel.html#06309e208fc5e10642a2e9bbe0f351eb">close</a> ()</td></tr>
49
57
 
50
58
  <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Close the underlying file descriptor. <a href="#06309e208fc5e10642a2e9bbe0f351eb"></a><br></td></tr>
@@ -58,36 +66,48 @@
58
66
  <tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1MessageChannel.html#6a9bc5d72715cb7ba0e437c8851ef487">write</a> (const vector&lt; string &gt; &amp;args)</td></tr>
59
67
 
60
68
  <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Send an array message, which consists of the given elements, over the underlying file descriptor. <a href="#6a9bc5d72715cb7ba0e437c8851ef487"></a><br></td></tr>
69
+ <tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1MessageChannel.html#70cc924c1ce7e2cedcbab61155d3aec9">write</a> (const char *name, va_list &amp;ap)</td></tr>
70
+
71
+ <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Send an array message, which consists of the given strings, over the underlying file descriptor. <a href="#70cc924c1ce7e2cedcbab61155d3aec9"></a><br></td></tr>
61
72
  <tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1MessageChannel.html#12cce3364023eacbe4fe09006cf3d38d">write</a> (const char *name,...)</td></tr>
62
73
 
63
74
  <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Send an array message, which consists of the given strings, over the underlying file descriptor. <a href="#12cce3364023eacbe4fe09006cf3d38d"></a><br></td></tr>
75
+ <tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1MessageChannel.html#bf02c51a74477650de8d5d5db661063b">writeUint32</a> (unsigned int value)</td></tr>
76
+
77
+ <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Write a 32-bit big-endian unsigned integer to the underlying file descriptor. <a href="#bf02c51a74477650de8d5d5db661063b"></a><br></td></tr>
64
78
  <tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1MessageChannel.html#44e01a783c48abadeea0d915b9893bfb">writeScalar</a> (const string &amp;str)</td></tr>
65
79
 
66
- <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Send a scalar message over the underlying file descriptor. <a href="#44e01a783c48abadeea0d915b9893bfb"></a><br></td></tr>
80
+ <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Write a scalar message to the underlying file descriptor. <a href="#44e01a783c48abadeea0d915b9893bfb"></a><br></td></tr>
67
81
  <tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1MessageChannel.html#80977020ef895f3ea790c5d28a333dda">writeScalar</a> (const char *data, unsigned int size)</td></tr>
68
82
 
69
- <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Send a scalar message over the underlying file descriptor. <a href="#80977020ef895f3ea790c5d28a333dda"></a><br></td></tr>
83
+ <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Write a scalar message to the underlying file descriptor. <a href="#80977020ef895f3ea790c5d28a333dda"></a><br></td></tr>
70
84
  <tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1MessageChannel.html#069314e4c7e1fe8c8ab36e16d2cc5fef">writeRaw</a> (const char *data, unsigned int size)</td></tr>
71
85
 
72
86
  <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Send a block of data over the underlying file descriptor. <a href="#069314e4c7e1fe8c8ab36e16d2cc5fef"></a><br></td></tr>
73
87
  <tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1MessageChannel.html#cfa38f4f0e22ec16350b8cc159e8e364">writeRaw</a> (const string &amp;data)</td></tr>
74
88
 
75
89
  <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Send a block of data over the underlying file descriptor. <a href="#cfa38f4f0e22ec16350b8cc159e8e364"></a><br></td></tr>
76
- <tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1MessageChannel.html#73e3f3cda384c085a2af0e820ccd3e98">writeFileDescriptor</a> (int fileDescriptor)</td></tr>
90
+ <tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1MessageChannel.html#e0c558e07dcc91900016773b2bec38d8">writeFileDescriptor</a> (int fileDescriptor, bool negotiate=true)</td></tr>
77
91
 
78
- <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pass a file descriptor. <a href="#73e3f3cda384c085a2af0e820ccd3e98"></a><br></td></tr>
92
+ <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pass a file descriptor. <a href="#e0c558e07dcc91900016773b2bec38d8"></a><br></td></tr>
79
93
  <tr><td class="memItemLeft" nowrap align="right" valign="top">bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1MessageChannel.html#129659b60d1a663337873d2af944431e">read</a> (vector&lt; string &gt; &amp;args)</td></tr>
80
94
 
81
95
  <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Read an array message from the underlying file descriptor. <a href="#129659b60d1a663337873d2af944431e"></a><br></td></tr>
82
- <tr><td class="memItemLeft" nowrap align="right" valign="top">bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1MessageChannel.html#4ce6a0e751b5e3563bee583c231569bc">readScalar</a> (string &amp;output)</td></tr>
96
+ <tr><td class="memItemLeft" nowrap align="right" valign="top">bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1MessageChannel.html#7b0c67852ea8ab455af75b1037c7f8b6">readUint32</a> (unsigned int &amp;value, unsigned long long *timeout=NULL)</td></tr>
97
+
98
+ <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Read a 32-bit big-endian unsigned integer from the underlying file descriptor. <a href="#7b0c67852ea8ab455af75b1037c7f8b6"></a><br></td></tr>
99
+ <tr><td class="memItemLeft" nowrap align="right" valign="top">bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1MessageChannel.html#1f3cf672b566166ed920c2bba4d19604">readScalar</a> (string &amp;output, unsigned int maxSize=0, unsigned long long *timeout=NULL)</td></tr>
100
+
101
+ <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Read a scalar message from the underlying file descriptor. <a href="#1f3cf672b566166ed920c2bba4d19604"></a><br></td></tr>
102
+ <tr><td class="memItemLeft" nowrap align="right" valign="top">bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1MessageChannel.html#b471dc1888f030e20ed23068a160ec2a">readRaw</a> (void *buf, unsigned int size, unsigned long long *timeout=NULL)</td></tr>
83
103
 
84
- <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Read a scalar message from the underlying file descriptor. <a href="#4ce6a0e751b5e3563bee583c231569bc"></a><br></td></tr>
85
- <tr><td class="memItemLeft" nowrap align="right" valign="top">bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1MessageChannel.html#cd1d1bd1cc787784c8b54f5471fff479">readRaw</a> (void *buf, unsigned int size)</td></tr>
104
+ <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Read exactly <code>size</code> bytes of data from the underlying file descriptor, and put the result in <code>buf</code>. <a href="#b471dc1888f030e20ed23068a160ec2a"></a><br></td></tr>
105
+ <tr><td class="memItemLeft" nowrap align="right" valign="top">bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1MessageChannel.html#c2407ed109785b49794989507c570149">waitUntilReadable</a> (unsigned long long *timeout)</td></tr>
86
106
 
87
- <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Read exactly <code>size</code> bytes of data from the underlying file descriptor, and put the result in <code>buf</code>. <a href="#cd1d1bd1cc787784c8b54f5471fff479"></a><br></td></tr>
88
- <tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1MessageChannel.html#1561b7e4a0f4d39ea431f456e5655488">readFileDescriptor</a> ()</td></tr>
107
+ <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Waits at most <code>*timeout</code> milliseconds for the file descriptor to become readable. <a href="#c2407ed109785b49794989507c570149"></a><br></td></tr>
108
+ <tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1MessageChannel.html#1a28ba9d078f38f2831673092ac9dcbc">readFileDescriptor</a> (bool negotiate=true)</td></tr>
89
109
 
90
- <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Receive a file descriptor, which had been passed over the underlying file descriptor. <a href="#1561b7e4a0f4d39ea431f456e5655488"></a><br></td></tr>
110
+ <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Receive a file descriptor, which had been passed over the underlying file descriptor. <a href="#1a28ba9d078f38f2831673092ac9dcbc"></a><br></td></tr>
91
111
  <tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1MessageChannel.html#eb69bffbbb148c9bc8662e20b416c4e2">setReadTimeout</a> (unsigned int msec)</td></tr>
92
112
 
93
113
  <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Set the timeout value for reading data from this channel. <a href="#eb69bffbbb148c9bc8662e20b416c4e2"></a><br></td></tr>
@@ -99,7 +119,7 @@
99
119
  Convenience class for I/O operations on file descriptors.
100
120
  <p>
101
121
  This class provides convenience methods for:<ul>
102
- <li>sending and receiving raw data over a file descriptor.</li><li>sending and receiving messages over a file descriptor.</li><li>file descriptor passing over a Unix socket. All of these methods use exceptions for error reporting.</li></ul>
122
+ <li>sending and receiving raw data over a file descriptor.</li><li>sending and receiving messages over a file descriptor.</li><li>file descriptor passing over a Unix socket.</li><li>data size limit enforcement and time constraint enforcement. All of these methods use exceptions for error reporting.</li></ul>
103
123
  <p>
104
124
  There are two kinds of messages:<ul>
105
125
  <li>Array messages. These are just a list of strings, and the message itself has a specific length. The contained strings may not contain NUL characters (<code>'\0'</code>). Note that an array message must have at least one element.</li><li>Scalar messages. These are byte strings which may contain arbitrary binary data. Scalar messages also have a specific length. The protocol is designed to be low overhead, easy to implement and easy to parse.</li></ul>
@@ -122,7 +142,8 @@ There are two kinds of messages:<ul>
122
142
  The life time of a <a class="el" href="classPassenger_1_1MessageChannel.html" title="Convenience class for I/O operations on file descriptors.">MessageChannel</a> is independent from that of the wrapped file descriptor. If a <a class="el" href="classPassenger_1_1MessageChannel.html" title="Convenience class for I/O operations on file descriptors.">MessageChannel</a> object is destroyed, the file descriptor is not automatically closed. Call <a class="el" href="classPassenger_1_1MessageChannel.html#06309e208fc5e10642a2e9bbe0f351eb" title="Close the underlying file descriptor.">close()</a> if you want to close the file descriptor.<p>
123
143
  <dl class="note" compact><dt><b>Note:</b></dt><dd>I/O operations are not buffered. <p>
124
144
  Be careful with mixing the sending/receiving of array messages, scalar messages and file descriptors. If you send a collection of any of these in a specific order, then the receiving side must receive them in the exact some order. So suppose you first send a message, then a file descriptor, then a scalar, then the receiving side must first receive a message, then a file descriptor, then a scalar. If the receiving side does things in the wrong order then bad things will happen. <p>
125
- <a class="el" href="classPassenger_1_1MessageChannel.html" title="Convenience class for I/O operations on file descriptors.">MessageChannel</a> is not thread-safe, but is reentrant. </dd></dl>
145
+ <a class="el" href="classPassenger_1_1MessageChannel.html" title="Convenience class for I/O operations on file descriptors.">MessageChannel</a> is not thread-safe, but is reentrant. <p>
146
+ Some methods throw <a class="el" href="classPassenger_1_1SecurityException.html" title="Represents some kind of security error.">SecurityException</a> and <a class="el" href="classPassenger_1_1TimeoutException.html" title="An exception indicating that some timeout expired.">TimeoutException</a>. When these exceptions are thrown, the channel will be left in an inconsistent state because only parts of the data have been read. You should close the channel after having caught these exceptions. </dd></dl>
126
147
  <hr><h2>Constructor &amp; Destructor Documentation</h2>
127
148
  <a class="anchor" name="73e7c9a8e421d29558838176aff02ca4"></a><!-- doxytag: member="Passenger::MessageChannel::MessageChannel" ref="73e7c9a8e421d29558838176aff02ca4" args="()" -->
128
149
  <div class="memitem">
@@ -171,7 +192,30 @@ If this method is called multiple times, the file descriptor will only be closed
171
192
  <tr><td valign="top"></td><td valign="top"><em>boost::thread_interrupted</em>&nbsp;</td><td></td></tr>
172
193
  </table>
173
194
  </dl>
195
+ <dl class="post" compact><dt><b>Postcondition:</b></dt><dd><a class="el" href="classPassenger_1_1MessageChannel.html#0b1e25dd75783d9753f8a0d1dd42606a" title="Returns the underlying file descriptor.">filenum()</a> == -1 <p>
196
+ !connected() </dd></dl>
197
+
198
+ </div>
199
+ </div><p>
200
+ <a class="anchor" name="0b1e25dd75783d9753f8a0d1dd42606a"></a><!-- doxytag: member="Passenger::MessageChannel::filenum" ref="0b1e25dd75783d9753f8a0d1dd42606a" args="() const " -->
201
+ <div class="memitem">
202
+ <div class="memproto">
203
+ <table class="memname">
204
+ <tr>
205
+ <td class="memname">int Passenger::MessageChannel::filenum </td>
206
+ <td>(</td>
207
+ <td class="paramname"> </td>
208
+ <td>&nbsp;)&nbsp;</td>
209
+ <td> const<code> [inline]</code></td>
210
+ </tr>
211
+ </table>
212
+ </div>
213
+ <div class="memdoc">
174
214
 
215
+ <p>
216
+ Returns the underlying file descriptor.
217
+ <p>
218
+ -1 if it has already been closed.
175
219
  </div>
176
220
  </div><p>
177
221
  <a class="anchor" name="129659b60d1a663337873d2af944431e"></a><!-- doxytag: member="Passenger::MessageChannel::read" ref="129659b60d1a663337873d2af944431e" args="(vector&lt; string &gt; &amp;args)" -->
@@ -209,14 +253,15 @@ Read an array message from the underlying file descriptor.
209
253
 
210
254
  </div>
211
255
  </div><p>
212
- <a class="anchor" name="1561b7e4a0f4d39ea431f456e5655488"></a><!-- doxytag: member="Passenger::MessageChannel::readFileDescriptor" ref="1561b7e4a0f4d39ea431f456e5655488" args="()" -->
256
+ <a class="anchor" name="1a28ba9d078f38f2831673092ac9dcbc"></a><!-- doxytag: member="Passenger::MessageChannel::readFileDescriptor" ref="1a28ba9d078f38f2831673092ac9dcbc" args="(bool negotiate=true)" -->
213
257
  <div class="memitem">
214
258
  <div class="memproto">
215
259
  <table class="memname">
216
260
  <tr>
217
261
  <td class="memname">int Passenger::MessageChannel::readFileDescriptor </td>
218
262
  <td>(</td>
219
- <td class="paramname"> </td>
263
+ <td class="paramtype">bool&nbsp;</td>
264
+ <td class="paramname"> <em>negotiate</em> = <code>true</code> </td>
220
265
  <td>&nbsp;)&nbsp;</td>
221
266
  <td><code> [inline]</code></td>
222
267
  </tr>
@@ -227,6 +272,11 @@ Read an array message from the underlying file descriptor.
227
272
  <p>
228
273
  Receive a file descriptor, which had been passed over the underlying file descriptor.
229
274
  <p>
275
+ <dl compact><dt><b>Parameters:</b></dt><dd>
276
+ <table border="0" cellspacing="2" cellpadding="0">
277
+ <tr><td valign="top"></td><td valign="top"><em>negotiate</em>&nbsp;</td><td>See Ruby's MessageChannel::send_io method's comments. </td></tr>
278
+ </table>
279
+ </dl>
230
280
  <dl class="return" compact><dt><b>Returns:</b></dt><dd>The passed file descriptor. </dd></dl>
231
281
  <dl compact><dt><b>Exceptions:</b></dt><dd>
232
282
  <table border="0" cellspacing="2" cellpadding="0">
@@ -238,7 +288,7 @@ Receive a file descriptor, which had been passed over the underlying file descri
238
288
 
239
289
  </div>
240
290
  </div><p>
241
- <a class="anchor" name="cd1d1bd1cc787784c8b54f5471fff479"></a><!-- doxytag: member="Passenger::MessageChannel::readRaw" ref="cd1d1bd1cc787784c8b54f5471fff479" args="(void *buf, unsigned int size)" -->
291
+ <a class="anchor" name="b471dc1888f030e20ed23068a160ec2a"></a><!-- doxytag: member="Passenger::MessageChannel::readRaw" ref="b471dc1888f030e20ed23068a160ec2a" args="(void *buf, unsigned int size, unsigned long long *timeout=NULL)" -->
242
292
  <div class="memitem">
243
293
  <div class="memproto">
244
294
  <table class="memname">
@@ -252,7 +302,13 @@ Receive a file descriptor, which had been passed over the underlying file descri
252
302
  <td class="paramkey"></td>
253
303
  <td></td>
254
304
  <td class="paramtype">unsigned int&nbsp;</td>
255
- <td class="paramname"> <em>size</em></td><td>&nbsp;</td>
305
+ <td class="paramname"> <em>size</em>, </td>
306
+ </tr>
307
+ <tr>
308
+ <td class="paramkey"></td>
309
+ <td></td>
310
+ <td class="paramtype">unsigned long long *&nbsp;</td>
311
+ <td class="paramname"> <em>timeout</em> = <code>NULL</code></td><td>&nbsp;</td>
256
312
  </tr>
257
313
  <tr>
258
314
  <td></td>
@@ -271,6 +327,7 @@ If end-of-file has been reached, or if end-of-file was encountered before <code>
271
327
  <table border="0" cellspacing="2" cellpadding="0">
272
328
  <tr><td valign="top"></td><td valign="top"><em>buf</em>&nbsp;</td><td>The buffer to place the read data in. This buffer must be at least <code>size</code> bytes long. </td></tr>
273
329
  <tr><td valign="top"></td><td valign="top"><em>size</em>&nbsp;</td><td>The number of bytes to read. </td></tr>
330
+ <tr><td valign="top"></td><td valign="top"><em>timeout</em>&nbsp;</td><td>A pointer to an integer, which specifies the maximum number of milliseconds that may be spent on reading the <code>size</code> bytes of data. If the timeout expired then <a class="el" href="classPassenger_1_1TimeoutException.html" title="An exception indicating that some timeout expired.">TimeoutException</a> will be thrown. If this function returns without throwing an exception, then the total number of milliseconds spent on reading will be deducted from <code>timeout</code>. Pass NULL if you do not want to enforce a timeout. </td></tr>
274
331
  </table>
275
332
  </dl>
276
333
  <dl class="return" compact><dt><b>Returns:</b></dt><dd>Whether reading was successful or whether EOF was reached. </dd></dl>
@@ -278,6 +335,7 @@ If end-of-file has been reached, or if end-of-file was encountered before <code>
278
335
  <dl compact><dt><b>Exceptions:</b></dt><dd>
279
336
  <table border="0" cellspacing="2" cellpadding="0">
280
337
  <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classPassenger_1_1SystemException.html" title="Represents an error returned by a system call or a standard library call.">SystemException</a></em>&nbsp;</td><td>Something went wrong during reading. </td></tr>
338
+ <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classPassenger_1_1TimeoutException.html" title="An exception indicating that some timeout expired.">TimeoutException</a></em>&nbsp;</td><td>Unable to read <code>size</code> bytes of data within <code>timeout</code> milliseconds. </td></tr>
281
339
  <tr><td valign="top"></td><td valign="top"><em>boost::thread_interrupted</em>&nbsp;</td><td></td></tr>
282
340
  </table>
283
341
  </dl>
@@ -285,7 +343,7 @@ If end-of-file has been reached, or if end-of-file was encountered before <code>
285
343
 
286
344
  </div>
287
345
  </div><p>
288
- <a class="anchor" name="4ce6a0e751b5e3563bee583c231569bc"></a><!-- doxytag: member="Passenger::MessageChannel::readScalar" ref="4ce6a0e751b5e3563bee583c231569bc" args="(string &amp;output)" -->
346
+ <a class="anchor" name="1f3cf672b566166ed920c2bba4d19604"></a><!-- doxytag: member="Passenger::MessageChannel::readScalar" ref="1f3cf672b566166ed920c2bba4d19604" args="(string &amp;output, unsigned int maxSize=0, unsigned long long *timeout=NULL)" -->
289
347
  <div class="memitem">
290
348
  <div class="memproto">
291
349
  <table class="memname">
@@ -293,9 +351,24 @@ If end-of-file has been reached, or if end-of-file was encountered before <code>
293
351
  <td class="memname">bool Passenger::MessageChannel::readScalar </td>
294
352
  <td>(</td>
295
353
  <td class="paramtype">string &amp;&nbsp;</td>
296
- <td class="paramname"> <em>output</em> </td>
297
- <td>&nbsp;)&nbsp;</td>
298
- <td><code> [inline]</code></td>
354
+ <td class="paramname"> <em>output</em>, </td>
355
+ </tr>
356
+ <tr>
357
+ <td class="paramkey"></td>
358
+ <td></td>
359
+ <td class="paramtype">unsigned int&nbsp;</td>
360
+ <td class="paramname"> <em>maxSize</em> = <code>0</code>, </td>
361
+ </tr>
362
+ <tr>
363
+ <td class="paramkey"></td>
364
+ <td></td>
365
+ <td class="paramtype">unsigned long long *&nbsp;</td>
366
+ <td class="paramname"> <em>timeout</em> = <code>NULL</code></td><td>&nbsp;</td>
367
+ </tr>
368
+ <tr>
369
+ <td></td>
370
+ <td>)</td>
371
+ <td></td><td></td><td><code> [inline]</code></td>
299
372
  </tr>
300
373
  </table>
301
374
  </div>
@@ -307,16 +380,64 @@ Read a scalar message from the underlying file descriptor.
307
380
  <dl compact><dt><b>Parameters:</b></dt><dd>
308
381
  <table border="0" cellspacing="2" cellpadding="0">
309
382
  <tr><td valign="top"></td><td valign="top"><em>output</em>&nbsp;</td><td>The message will be put in here. </td></tr>
383
+ <tr><td valign="top"></td><td valign="top"><em>maxSize</em>&nbsp;</td><td>The maximum number of bytes that may be read. If the scalar to read is larger than this, then a <a class="el" href="classPassenger_1_1SecurityException.html" title="Represents some kind of security error.">SecurityException</a> will be thrown. Set to 0 for no size limit. </td></tr>
384
+ <tr><td valign="top"></td><td valign="top"><em>timeout</em>&nbsp;</td><td>A pointer to an integer, representing the maximum number of milliseconds to spend on reading the entire scalar. A <a class="el" href="classPassenger_1_1TimeoutException.html" title="An exception indicating that some timeout expired.">TimeoutException</a> will be thrown if unable to read the entire scalar within this time period. If no exception is thrown, the the amount of time spent on waiting will be deducted from <code>*timeout</code>. Pass NULL if you do not want to enforce any time limits. </td></tr>
310
385
  </table>
311
386
  </dl>
312
387
  <dl class="return" compact><dt><b>Returns:</b></dt><dd>Whether end-of-file was reached during reading. </dd></dl>
313
388
  <dl compact><dt><b>Exceptions:</b></dt><dd>
314
389
  <table border="0" cellspacing="2" cellpadding="0">
315
- <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classPassenger_1_1SystemException.html" title="Represents an error returned by a system call or a standard library call.">SystemException</a></em>&nbsp;</td><td>An error occured while writing the data to the file descriptor. </td></tr>
390
+ <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classPassenger_1_1SystemException.html" title="Represents an error returned by a system call or a standard library call.">SystemException</a></em>&nbsp;</td><td>An error occured while reading data from the file descriptor. </td></tr>
391
+ <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classPassenger_1_1SecurityException.html" title="Represents some kind of security error.">SecurityException</a></em>&nbsp;</td><td>There is more data to read than allowed by maxSize. </td></tr>
392
+ <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classPassenger_1_1TimeoutException.html" title="An exception indicating that some timeout expired.">TimeoutException</a></em>&nbsp;</td><td>Unable to read the entire scalar within <code>timeout</code> milliseconds. </td></tr>
393
+ <tr><td valign="top"></td><td valign="top"><em>boost::thread_interrupted</em>&nbsp;</td><td></td></tr>
394
+ </table>
395
+ </dl>
396
+ <dl class="see" compact><dt><b>See also:</b></dt><dd><a class="el" href="classPassenger_1_1MessageChannel.html#44e01a783c48abadeea0d915b9893bfb" title="Write a scalar message to the underlying file descriptor.">writeScalar()</a> </dd></dl>
397
+
398
+ </div>
399
+ </div><p>
400
+ <a class="anchor" name="7b0c67852ea8ab455af75b1037c7f8b6"></a><!-- doxytag: member="Passenger::MessageChannel::readUint32" ref="7b0c67852ea8ab455af75b1037c7f8b6" args="(unsigned int &amp;value, unsigned long long *timeout=NULL)" -->
401
+ <div class="memitem">
402
+ <div class="memproto">
403
+ <table class="memname">
404
+ <tr>
405
+ <td class="memname">bool Passenger::MessageChannel::readUint32 </td>
406
+ <td>(</td>
407
+ <td class="paramtype">unsigned int &amp;&nbsp;</td>
408
+ <td class="paramname"> <em>value</em>, </td>
409
+ </tr>
410
+ <tr>
411
+ <td class="paramkey"></td>
412
+ <td></td>
413
+ <td class="paramtype">unsigned long long *&nbsp;</td>
414
+ <td class="paramname"> <em>timeout</em> = <code>NULL</code></td><td>&nbsp;</td>
415
+ </tr>
416
+ <tr>
417
+ <td></td>
418
+ <td>)</td>
419
+ <td></td><td></td><td><code> [inline]</code></td>
420
+ </tr>
421
+ </table>
422
+ </div>
423
+ <div class="memdoc">
424
+
425
+ <p>
426
+ Read a 32-bit big-endian unsigned integer from the underlying file descriptor.
427
+ <p>
428
+ <dl compact><dt><b>Parameters:</b></dt><dd>
429
+ <table border="0" cellspacing="2" cellpadding="0">
430
+ <tr><td valign="top"></td><td valign="top"><em>value</em>&nbsp;</td><td>Upon success, the read value will be stored in here. </td></tr>
431
+ <tr><td valign="top"></td><td valign="top"><em>timeout</em>&nbsp;</td><td>A pointer to an integer, representing the maximum number of milliseconds to spend on reading the entire integer. A <a class="el" href="classPassenger_1_1TimeoutException.html" title="An exception indicating that some timeout expired.">TimeoutException</a> will be thrown if the timeout expires. If no exception is thrown, the the amount of time spent on waiting will be deducted from <code>*timeout</code>. Pass NULL if you do not want to enforce any time limits. </td></tr>
432
+ </table>
433
+ </dl>
434
+ <dl class="return" compact><dt><b>Returns:</b></dt><dd>True if a value was read, false if EOF was reached before all data can be read. </dd></dl>
435
+ <dl compact><dt><b>Exceptions:</b></dt><dd>
436
+ <table border="0" cellspacing="2" cellpadding="0">
437
+ <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classPassenger_1_1SystemException.html" title="Represents an error returned by a system call or a standard library call.">SystemException</a></em>&nbsp;</td><td>An error occurred while reading data from the file descriptor. </td></tr>
316
438
  <tr><td valign="top"></td><td valign="top"><em>boost::thread_interrupted</em>&nbsp;</td><td></td></tr>
317
439
  </table>
318
440
  </dl>
319
- <dl class="see" compact><dt><b>See also:</b></dt><dd><a class="el" href="classPassenger_1_1MessageChannel.html#44e01a783c48abadeea0d915b9893bfb" title="Send a scalar message over the underlying file descriptor.">writeScalar()</a> </dd></dl>
320
441
 
321
442
  </div>
322
443
  </div><p>
@@ -384,6 +505,37 @@ If no data can be written within the timeout period, then a <a class="el" href="
384
505
  </table>
385
506
  </dl>
386
507
 
508
+ </div>
509
+ </div><p>
510
+ <a class="anchor" name="c2407ed109785b49794989507c570149"></a><!-- doxytag: member="Passenger::MessageChannel::waitUntilReadable" ref="c2407ed109785b49794989507c570149" args="(unsigned long long *timeout)" -->
511
+ <div class="memitem">
512
+ <div class="memproto">
513
+ <table class="memname">
514
+ <tr>
515
+ <td class="memname">bool Passenger::MessageChannel::waitUntilReadable </td>
516
+ <td>(</td>
517
+ <td class="paramtype">unsigned long long *&nbsp;</td>
518
+ <td class="paramname"> <em>timeout</em> </td>
519
+ <td>&nbsp;)&nbsp;</td>
520
+ <td><code> [inline]</code></td>
521
+ </tr>
522
+ </table>
523
+ </div>
524
+ <div class="memdoc">
525
+
526
+ <p>
527
+ Waits at most <code>*timeout</code> milliseconds for the file descriptor to become readable.
528
+ <p>
529
+ Returns true if it become readable within the timeout, false if the timeout expired.<p>
530
+ <code>*timeout</code> may be 0, in which case this method will check whether the file descriptor is readable, and immediately returns without waiting.<p>
531
+ If no exception is thrown, this method deducts the number of milliseconds that has passed from <code>*timeout</code>.<p>
532
+ <dl compact><dt><b>Exceptions:</b></dt><dd>
533
+ <table border="0" cellspacing="2" cellpadding="0">
534
+ <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classPassenger_1_1SystemException.html" title="Represents an error returned by a system call or a standard library call.">SystemException</a></em>&nbsp;</td><td></td></tr>
535
+ <tr><td valign="top"></td><td valign="top"><em>boost::thread_interrupted</em>&nbsp;</td><td></td></tr>
536
+ </table>
537
+ </dl>
538
+
387
539
  </div>
388
540
  </div><p>
389
541
  <a class="anchor" name="12cce3364023eacbe4fe09006cf3d38d"></a><!-- doxytag: member="Passenger::MessageChannel::write" ref="12cce3364023eacbe4fe09006cf3d38d" args="(const char *name,...)" -->
@@ -429,6 +581,45 @@ Send an array message, which consists of the given strings, over the underlying
429
581
  <dl class="pre" compact><dt><b>Precondition:</b></dt><dd>None of the message elements may contain a NUL character (<code>'\0'</code>). </dd></dl>
430
582
  <dl class="see" compact><dt><b>See also:</b></dt><dd><a class="el" href="classPassenger_1_1MessageChannel.html#129659b60d1a663337873d2af944431e" title="Read an array message from the underlying file descriptor.">read()</a>, <a class="el" href="classPassenger_1_1MessageChannel.html#9ad7a978cf8409e01ab2f0a2b6be5a0a" title="Send an array message, which consists of the given elements, over the underlying...">write(const list&lt;string&gt; &amp;)</a> </dd></dl>
431
583
 
584
+ </div>
585
+ </div><p>
586
+ <a class="anchor" name="70cc924c1ce7e2cedcbab61155d3aec9"></a><!-- doxytag: member="Passenger::MessageChannel::write" ref="70cc924c1ce7e2cedcbab61155d3aec9" args="(const char *name, va_list &amp;ap)" -->
587
+ <div class="memitem">
588
+ <div class="memproto">
589
+ <table class="memname">
590
+ <tr>
591
+ <td class="memname">void Passenger::MessageChannel::write </td>
592
+ <td>(</td>
593
+ <td class="paramtype">const char *&nbsp;</td>
594
+ <td class="paramname"> <em>name</em>, </td>
595
+ </tr>
596
+ <tr>
597
+ <td class="paramkey"></td>
598
+ <td></td>
599
+ <td class="paramtype">va_list &amp;&nbsp;</td>
600
+ <td class="paramname"> <em>ap</em></td><td>&nbsp;</td>
601
+ </tr>
602
+ <tr>
603
+ <td></td>
604
+ <td>)</td>
605
+ <td></td><td></td><td><code> [inline]</code></td>
606
+ </tr>
607
+ </table>
608
+ </div>
609
+ <div class="memdoc">
610
+
611
+ <p>
612
+ Send an array message, which consists of the given strings, over the underlying file descriptor.
613
+ <p>
614
+ Like <code>write(const char *name, ...)</code> but takes a va_list instead.<p>
615
+ <dl compact><dt><b>Exceptions:</b></dt><dd>
616
+ <table border="0" cellspacing="2" cellpadding="0">
617
+ <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classPassenger_1_1SystemException.html" title="Represents an error returned by a system call or a standard library call.">SystemException</a></em>&nbsp;</td><td>An error occured while writing the data to the file descriptor. </td></tr>
618
+ <tr><td valign="top"></td><td valign="top"><em>boost::thread_interrupted</em>&nbsp;</td><td></td></tr>
619
+ </table>
620
+ </dl>
621
+ <dl class="pre" compact><dt><b>Precondition:</b></dt><dd>None of the message elements may contain a NUL character (<code>'\0'</code>). </dd></dl>
622
+
432
623
  </div>
433
624
  </div><p>
434
625
  <a class="anchor" name="6a9bc5d72715cb7ba0e437c8851ef487"></a><!-- doxytag: member="Passenger::MessageChannel::write" ref="6a9bc5d72715cb7ba0e437c8851ef487" args="(const vector&lt; string &gt; &amp;args)" -->
@@ -538,7 +729,7 @@ Send an array message, which consists of the given elements, over the underlying
538
729
 
539
730
  </div>
540
731
  </div><p>
541
- <a class="anchor" name="73e3f3cda384c085a2af0e820ccd3e98"></a><!-- doxytag: member="Passenger::MessageChannel::writeFileDescriptor" ref="73e3f3cda384c085a2af0e820ccd3e98" args="(int fileDescriptor)" -->
732
+ <a class="anchor" name="e0c558e07dcc91900016773b2bec38d8"></a><!-- doxytag: member="Passenger::MessageChannel::writeFileDescriptor" ref="e0c558e07dcc91900016773b2bec38d8" args="(int fileDescriptor, bool negotiate=true)" -->
542
733
  <div class="memitem">
543
734
  <div class="memproto">
544
735
  <table class="memname">
@@ -546,9 +737,18 @@ Send an array message, which consists of the given elements, over the underlying
546
737
  <td class="memname">void Passenger::MessageChannel::writeFileDescriptor </td>
547
738
  <td>(</td>
548
739
  <td class="paramtype">int&nbsp;</td>
549
- <td class="paramname"> <em>fileDescriptor</em> </td>
550
- <td>&nbsp;)&nbsp;</td>
551
- <td><code> [inline]</code></td>
740
+ <td class="paramname"> <em>fileDescriptor</em>, </td>
741
+ </tr>
742
+ <tr>
743
+ <td class="paramkey"></td>
744
+ <td></td>
745
+ <td class="paramtype">bool&nbsp;</td>
746
+ <td class="paramname"> <em>negotiate</em> = <code>true</code></td><td>&nbsp;</td>
747
+ </tr>
748
+ <tr>
749
+ <td></td>
750
+ <td>)</td>
751
+ <td></td><td></td><td><code> [inline]</code></td>
552
752
  </tr>
553
753
  </table>
554
754
  </div>
@@ -561,6 +761,7 @@ This only works if the underlying file descriptor is a Unix socket.<p>
561
761
  <dl compact><dt><b>Parameters:</b></dt><dd>
562
762
  <table border="0" cellspacing="2" cellpadding="0">
563
763
  <tr><td valign="top"></td><td valign="top"><em>fileDescriptor</em>&nbsp;</td><td>The file descriptor to pass. </td></tr>
764
+ <tr><td valign="top"></td><td valign="top"><em>negotiate</em>&nbsp;</td><td>See Ruby's MessageChannel::send_io method's comments. </td></tr>
564
765
  </table>
565
766
  </dl>
566
767
  <dl compact><dt><b>Exceptions:</b></dt><dd>
@@ -570,7 +771,7 @@ This only works if the underlying file descriptor is a Unix socket.<p>
570
771
  </table>
571
772
  </dl>
572
773
  <dl class="pre" compact><dt><b>Precondition:</b></dt><dd><code>fileDescriptor &gt;= 0</code> </dd></dl>
573
- <dl class="see" compact><dt><b>See also:</b></dt><dd><a class="el" href="classPassenger_1_1MessageChannel.html#1561b7e4a0f4d39ea431f456e5655488" title="Receive a file descriptor, which had been passed over the underlying file descriptor...">readFileDescriptor()</a> </dd></dl>
774
+ <dl class="see" compact><dt><b>See also:</b></dt><dd><a class="el" href="classPassenger_1_1MessageChannel.html#1a28ba9d078f38f2831673092ac9dcbc" title="Receive a file descriptor, which had been passed over the underlying file descriptor...">readFileDescriptor()</a> </dd></dl>
574
775
 
575
776
  </div>
576
777
  </div><p>
@@ -594,6 +795,7 @@ This only works if the underlying file descriptor is a Unix socket.<p>
594
795
  Send a block of data over the underlying file descriptor.
595
796
  <p>
596
797
  This method blocks until everything is sent.<p>
798
+ <dl class="note" compact><dt><b>Note:</b></dt><dd>Security guarantee: this method will not copy the data in memory, so it's safe to use this method to write passwords to the underlying file descriptor.</dd></dl>
597
799
  <dl compact><dt><b>Parameters:</b></dt><dd>
598
800
  <table border="0" cellspacing="2" cellpadding="0">
599
801
  <tr><td valign="top"></td><td valign="top"><em>data</em>&nbsp;</td><td>The data to send. </td></tr>
@@ -638,6 +840,7 @@ This method blocks until everything is sent.<p>
638
840
  Send a block of data over the underlying file descriptor.
639
841
  <p>
640
842
  This method blocks until everything is sent.<p>
843
+ <dl class="note" compact><dt><b>Note:</b></dt><dd>Security guarantee: this method will not copy the data in memory, so it's safe to use this method to write passwords to the underlying file descriptor.</dd></dl>
641
844
  <dl compact><dt><b>Parameters:</b></dt><dd>
642
845
  <table border="0" cellspacing="2" cellpadding="0">
643
846
  <tr><td valign="top"></td><td valign="top"><em>data</em>&nbsp;</td><td>The data to send. </td></tr>
@@ -651,7 +854,7 @@ This method blocks until everything is sent.<p>
651
854
  <tr><td valign="top"></td><td valign="top"><em>boost::thread_interrupted</em>&nbsp;</td><td></td></tr>
652
855
  </table>
653
856
  </dl>
654
- <dl class="see" compact><dt><b>See also:</b></dt><dd><a class="el" href="classPassenger_1_1MessageChannel.html#cd1d1bd1cc787784c8b54f5471fff479" title="Read exactly size bytes of data from the underlying file descriptor, and put the...">readRaw()</a> </dd></dl>
857
+ <dl class="see" compact><dt><b>See also:</b></dt><dd><a class="el" href="classPassenger_1_1MessageChannel.html#b471dc1888f030e20ed23068a160ec2a" title="Read exactly size bytes of data from the underlying file descriptor, and put the...">readRaw()</a> </dd></dl>
655
858
 
656
859
  </div>
657
860
  </div><p>
@@ -681,8 +884,9 @@ This method blocks until everything is sent.<p>
681
884
  <div class="memdoc">
682
885
 
683
886
  <p>
684
- Send a scalar message over the underlying file descriptor.
887
+ Write a scalar message to the underlying file descriptor.
685
888
  <p>
889
+ <dl class="note" compact><dt><b>Note:</b></dt><dd>Security guarantee: this method will not copy the data in memory, so it's safe to use this method to write passwords to the underlying file descriptor.</dd></dl>
686
890
  <dl compact><dt><b>Parameters:</b></dt><dd>
687
891
  <table border="0" cellspacing="2" cellpadding="0">
688
892
  <tr><td valign="top"></td><td valign="top"><em>data</em>&nbsp;</td><td>The scalar message's content. </td></tr>
@@ -696,7 +900,7 @@ Send a scalar message over the underlying file descriptor.
696
900
  <tr><td valign="top"></td><td valign="top"><em>boost::thread_interrupted</em>&nbsp;</td><td></td></tr>
697
901
  </table>
698
902
  </dl>
699
- <dl class="see" compact><dt><b>See also:</b></dt><dd><a class="el" href="classPassenger_1_1MessageChannel.html#4ce6a0e751b5e3563bee583c231569bc" title="Read a scalar message from the underlying file descriptor.">readScalar()</a>, <a class="el" href="classPassenger_1_1MessageChannel.html#44e01a783c48abadeea0d915b9893bfb" title="Send a scalar message over the underlying file descriptor.">writeScalar(const string &amp;)</a> </dd></dl>
903
+ <dl class="see" compact><dt><b>See also:</b></dt><dd><a class="el" href="classPassenger_1_1MessageChannel.html#1f3cf672b566166ed920c2bba4d19604" title="Read a scalar message from the underlying file descriptor.">readScalar()</a>, <a class="el" href="classPassenger_1_1MessageChannel.html#44e01a783c48abadeea0d915b9893bfb" title="Write a scalar message to the underlying file descriptor.">writeScalar(const string &amp;)</a> </dd></dl>
700
904
 
701
905
  </div>
702
906
  </div><p>
@@ -717,8 +921,9 @@ Send a scalar message over the underlying file descriptor.
717
921
  <div class="memdoc">
718
922
 
719
923
  <p>
720
- Send a scalar message over the underlying file descriptor.
924
+ Write a scalar message to the underlying file descriptor.
721
925
  <p>
926
+ <dl class="note" compact><dt><b>Note:</b></dt><dd>Security guarantee: this method will not copy the data in memory, so it's safe to use this method to write passwords to the underlying file descriptor.</dd></dl>
722
927
  <dl compact><dt><b>Parameters:</b></dt><dd>
723
928
  <table border="0" cellspacing="2" cellpadding="0">
724
929
  <tr><td valign="top"></td><td valign="top"><em>str</em>&nbsp;</td><td>The scalar message's content. </td></tr>
@@ -730,14 +935,42 @@ Send a scalar message over the underlying file descriptor.
730
935
  <tr><td valign="top"></td><td valign="top"><em>boost::thread_interrupted</em>&nbsp;</td><td></td></tr>
731
936
  </table>
732
937
  </dl>
733
- <dl class="see" compact><dt><b>See also:</b></dt><dd><a class="el" href="classPassenger_1_1MessageChannel.html#4ce6a0e751b5e3563bee583c231569bc" title="Read a scalar message from the underlying file descriptor.">readScalar()</a>, <a class="el" href="classPassenger_1_1MessageChannel.html#80977020ef895f3ea790c5d28a333dda" title="Send a scalar message over the underlying file descriptor.">writeScalar(const char *, unsigned int)</a> </dd></dl>
938
+ <dl class="see" compact><dt><b>See also:</b></dt><dd><a class="el" href="classPassenger_1_1MessageChannel.html#1f3cf672b566166ed920c2bba4d19604" title="Read a scalar message from the underlying file descriptor.">readScalar()</a>, <a class="el" href="classPassenger_1_1MessageChannel.html#80977020ef895f3ea790c5d28a333dda" title="Write a scalar message to the underlying file descriptor.">writeScalar(const char *, unsigned int)</a> </dd></dl>
939
+
940
+ </div>
941
+ </div><p>
942
+ <a class="anchor" name="bf02c51a74477650de8d5d5db661063b"></a><!-- doxytag: member="Passenger::MessageChannel::writeUint32" ref="bf02c51a74477650de8d5d5db661063b" args="(unsigned int value)" -->
943
+ <div class="memitem">
944
+ <div class="memproto">
945
+ <table class="memname">
946
+ <tr>
947
+ <td class="memname">void Passenger::MessageChannel::writeUint32 </td>
948
+ <td>(</td>
949
+ <td class="paramtype">unsigned int&nbsp;</td>
950
+ <td class="paramname"> <em>value</em> </td>
951
+ <td>&nbsp;)&nbsp;</td>
952
+ <td><code> [inline]</code></td>
953
+ </tr>
954
+ </table>
955
+ </div>
956
+ <div class="memdoc">
957
+
958
+ <p>
959
+ Write a 32-bit big-endian unsigned integer to the underlying file descriptor.
960
+ <p>
961
+ <dl compact><dt><b>Exceptions:</b></dt><dd>
962
+ <table border="0" cellspacing="2" cellpadding="0">
963
+ <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classPassenger_1_1SystemException.html" title="Represents an error returned by a system call or a standard library call.">SystemException</a></em>&nbsp;</td><td>An error occurred while writing the data to the file descriptor. </td></tr>
964
+ <tr><td valign="top"></td><td valign="top"><em>boost::thread_interrupted</em>&nbsp;</td><td></td></tr>
965
+ </table>
966
+ </dl>
734
967
 
735
968
  </div>
736
969
  </div><p>
737
970
  <hr>The documentation for this class was generated from the following file:<ul>
738
971
  <li><a class="el" href="MessageChannel_8h-source.html">MessageChannel.h</a></ul>
739
972
  </div>
740
- <hr size="1"><address style="text-align: right;"><small>Generated on Wed Apr 8 22:35:12 2009 for Passenger by&nbsp;
973
+ <hr size="1"><address style="text-align: right;"><small>Generated on Sun Feb 21 12:22:48 2010 for Passenger by&nbsp;
741
974
  <a href="http://www.doxygen.org/index.html">
742
975
  <img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
743
976
  </body>