passenger 2.0.1 → 2.0.2

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 (243) hide show
  1. data/Rakefile +2 -1
  2. data/doc/Security of user switching support.html +1 -1
  3. data/doc/Users guide.html +1 -1
  4. data/ext/apache2/ApplicationPoolServerExecutable.cpp +4 -2
  5. data/ext/apache2/Bucket.cpp +104 -0
  6. data/ext/apache2/Bucket.h +36 -0
  7. data/ext/apache2/Configuration.h +1 -1
  8. data/ext/apache2/Hooks.cpp +2 -5
  9. data/ext/apache2/Utils.h +1 -1
  10. data/ext/boost/non_type.hpp +27 -0
  11. metadata +7 -247
  12. data/doc/Architectural overview.html +0 -740
  13. data/doc/cxxapi/ApplicationPoolServer_8h-source.html +0 -677
  14. data/doc/cxxapi/ApplicationPool_8h-source.html +0 -212
  15. data/doc/cxxapi/Application_8h-source.html +0 -448
  16. data/doc/cxxapi/Configuration_8h-source.html +0 -180
  17. data/doc/cxxapi/DummySpawnManager_8h-source.html +0 -126
  18. data/doc/cxxapi/Exceptions_8h-source.html +0 -244
  19. data/doc/cxxapi/Hooks_8h-source.html +0 -63
  20. data/doc/cxxapi/Logging_8h-source.html +0 -136
  21. data/doc/cxxapi/MessageChannel_8h-source.html +0 -524
  22. data/doc/cxxapi/SpawnManager_8h-source.html +0 -593
  23. data/doc/cxxapi/StandardApplicationPool_8h-source.html +0 -713
  24. data/doc/cxxapi/System_8h-source.html +0 -251
  25. data/doc/cxxapi/Utils_8h-source.html +0 -283
  26. data/doc/cxxapi/annotated.html +0 -59
  27. data/doc/cxxapi/classClient-members.html +0 -35
  28. data/doc/cxxapi/classClient.html +0 -117
  29. data/doc/cxxapi/classDirectoryMapper-members.html +0 -38
  30. data/doc/cxxapi/classDirectoryMapper.html +0 -203
  31. data/doc/cxxapi/classHooks-members.html +0 -33
  32. data/doc/cxxapi/classHooks.html +0 -43
  33. data/doc/cxxapi/classPassenger_1_1Application-members.html +0 -38
  34. data/doc/cxxapi/classPassenger_1_1Application.html +0 -229
  35. data/doc/cxxapi/classPassenger_1_1ApplicationPool-members.html +0 -40
  36. data/doc/cxxapi/classPassenger_1_1ApplicationPool.html +0 -331
  37. data/doc/cxxapi/classPassenger_1_1ApplicationPoolServer-members.html +0 -36
  38. data/doc/cxxapi/classPassenger_1_1ApplicationPoolServer.html +0 -225
  39. data/doc/cxxapi/classPassenger_1_1ApplicationPool__inherit__graph.map +0 -1
  40. data/doc/cxxapi/classPassenger_1_1ApplicationPool__inherit__graph.md5 +0 -1
  41. data/doc/cxxapi/classPassenger_1_1ApplicationPool__inherit__graph.png +0 -0
  42. data/doc/cxxapi/classPassenger_1_1Application_1_1Session-members.html +0 -43
  43. data/doc/cxxapi/classPassenger_1_1Application_1_1Session.html +0 -329
  44. data/doc/cxxapi/classPassenger_1_1BusyException-members.html +0 -33
  45. data/doc/cxxapi/classPassenger_1_1BusyException.html +0 -47
  46. data/doc/cxxapi/classPassenger_1_1ConfigurationException-members.html +0 -33
  47. data/doc/cxxapi/classPassenger_1_1ConfigurationException.html +0 -44
  48. data/doc/cxxapi/classPassenger_1_1DummySpawnManager-members.html +0 -33
  49. data/doc/cxxapi/classPassenger_1_1DummySpawnManager.html +0 -51
  50. data/doc/cxxapi/classPassenger_1_1FileNotFoundException-members.html +0 -33
  51. data/doc/cxxapi/classPassenger_1_1FileNotFoundException.html +0 -51
  52. data/doc/cxxapi/classPassenger_1_1FileNotFoundException__inherit__graph.map +0 -1
  53. data/doc/cxxapi/classPassenger_1_1FileNotFoundException__inherit__graph.md5 +0 -1
  54. data/doc/cxxapi/classPassenger_1_1FileNotFoundException__inherit__graph.png +0 -0
  55. data/doc/cxxapi/classPassenger_1_1FileSystemException-members.html +0 -38
  56. data/doc/cxxapi/classPassenger_1_1FileSystemException.html +0 -61
  57. data/doc/cxxapi/classPassenger_1_1FileSystemException__inherit__graph.map +0 -1
  58. data/doc/cxxapi/classPassenger_1_1FileSystemException__inherit__graph.md5 +0 -1
  59. data/doc/cxxapi/classPassenger_1_1FileSystemException__inherit__graph.png +0 -0
  60. data/doc/cxxapi/classPassenger_1_1IOException-members.html +0 -33
  61. data/doc/cxxapi/classPassenger_1_1IOException.html +0 -54
  62. data/doc/cxxapi/classPassenger_1_1IOException__inherit__graph.map +0 -1
  63. data/doc/cxxapi/classPassenger_1_1IOException__inherit__graph.md5 +0 -1
  64. data/doc/cxxapi/classPassenger_1_1IOException__inherit__graph.png +0 -0
  65. data/doc/cxxapi/classPassenger_1_1MessageChannel-members.html +0 -47
  66. data/doc/cxxapi/classPassenger_1_1MessageChannel.html +0 -591
  67. data/doc/cxxapi/classPassenger_1_1SpawnException-members.html +0 -35
  68. data/doc/cxxapi/classPassenger_1_1SpawnException.html +0 -77
  69. data/doc/cxxapi/classPassenger_1_1SpawnManager-members.html +0 -37
  70. data/doc/cxxapi/classPassenger_1_1SpawnManager.html +0 -255
  71. data/doc/cxxapi/classPassenger_1_1StandardApplicationPool-members.html +0 -42
  72. data/doc/cxxapi/classPassenger_1_1StandardApplicationPool.html +0 -372
  73. data/doc/cxxapi/classPassenger_1_1StandardApplicationPool__inherit__graph.map +0 -1
  74. data/doc/cxxapi/classPassenger_1_1StandardApplicationPool__inherit__graph.md5 +0 -1
  75. data/doc/cxxapi/classPassenger_1_1StandardApplicationPool__inherit__graph.png +0 -0
  76. data/doc/cxxapi/classPassenger_1_1SystemException-members.html +0 -37
  77. data/doc/cxxapi/classPassenger_1_1SystemException.html +0 -154
  78. data/doc/cxxapi/classPassenger_1_1SystemException__inherit__graph.map +0 -1
  79. data/doc/cxxapi/classPassenger_1_1SystemException__inherit__graph.md5 +0 -1
  80. data/doc/cxxapi/classPassenger_1_1SystemException__inherit__graph.png +0 -0
  81. data/doc/cxxapi/classPassenger_1_1TempFile-members.html +0 -36
  82. data/doc/cxxapi/classPassenger_1_1TempFile.html +0 -128
  83. data/doc/cxxapi/classPassenger_1_1Thread-members.html +0 -35
  84. data/doc/cxxapi/classPassenger_1_1Thread.html +0 -100
  85. data/doc/cxxapi/classboost_1_1this__thread_1_1disable__syscall__interruption-members.html +0 -33
  86. data/doc/cxxapi/classboost_1_1this__thread_1_1disable__syscall__interruption.html +0 -46
  87. data/doc/cxxapi/classboost_1_1this__thread_1_1enable__syscall__interruption-members.html +0 -33
  88. data/doc/cxxapi/classboost_1_1this__thread_1_1enable__syscall__interruption.html +0 -44
  89. data/doc/cxxapi/classboost_1_1this__thread_1_1restore__syscall__interruption-members.html +0 -33
  90. data/doc/cxxapi/classboost_1_1this__thread_1_1restore__syscall__interruption.html +0 -44
  91. data/doc/cxxapi/definitions_8h-source.html +0 -28
  92. data/doc/cxxapi/doxygen.css +0 -433
  93. data/doc/cxxapi/doxygen.png +0 -0
  94. data/doc/cxxapi/files.html +0 -41
  95. data/doc/cxxapi/ftv2blank.png +0 -0
  96. data/doc/cxxapi/ftv2doc.png +0 -0
  97. data/doc/cxxapi/ftv2folderclosed.png +0 -0
  98. data/doc/cxxapi/ftv2folderopen.png +0 -0
  99. data/doc/cxxapi/ftv2lastnode.png +0 -0
  100. data/doc/cxxapi/ftv2link.png +0 -0
  101. data/doc/cxxapi/ftv2mlastnode.png +0 -0
  102. data/doc/cxxapi/ftv2mnode.png +0 -0
  103. data/doc/cxxapi/ftv2node.png +0 -0
  104. data/doc/cxxapi/ftv2plastnode.png +0 -0
  105. data/doc/cxxapi/ftv2pnode.png +0 -0
  106. data/doc/cxxapi/ftv2vertline.png +0 -0
  107. data/doc/cxxapi/functions.html +0 -212
  108. data/doc/cxxapi/functions_func.html +0 -207
  109. data/doc/cxxapi/functions_type.html +0 -46
  110. data/doc/cxxapi/functions_vars.html +0 -48
  111. data/doc/cxxapi/graph_legend.dot +0 -22
  112. data/doc/cxxapi/graph_legend.html +0 -87
  113. data/doc/cxxapi/graph_legend.png +0 -0
  114. data/doc/cxxapi/group__Configuration.html +0 -236
  115. data/doc/cxxapi/group__Configuration.png +0 -0
  116. data/doc/cxxapi/group__Core.html +0 -51
  117. data/doc/cxxapi/group__Core.png +0 -0
  118. data/doc/cxxapi/group__Exceptions.html +0 -43
  119. data/doc/cxxapi/group__Hooks.html +0 -46
  120. data/doc/cxxapi/group__Hooks.png +0 -0
  121. data/doc/cxxapi/group__Support.html +0 -406
  122. data/doc/cxxapi/hierarchy.html +0 -67
  123. data/doc/cxxapi/index.html +0 -11
  124. data/doc/cxxapi/inherit__graph__0.map +0 -1
  125. data/doc/cxxapi/inherit__graph__0.md5 +0 -1
  126. data/doc/cxxapi/inherit__graph__0.png +0 -0
  127. data/doc/cxxapi/inherit__graph__1.map +0 -1
  128. data/doc/cxxapi/inherit__graph__1.md5 +0 -1
  129. data/doc/cxxapi/inherit__graph__1.png +0 -0
  130. data/doc/cxxapi/inherit__graph__10.map +0 -1
  131. data/doc/cxxapi/inherit__graph__10.md5 +0 -1
  132. data/doc/cxxapi/inherit__graph__10.png +0 -0
  133. data/doc/cxxapi/inherit__graph__11.map +0 -1
  134. data/doc/cxxapi/inherit__graph__11.md5 +0 -1
  135. data/doc/cxxapi/inherit__graph__11.png +0 -0
  136. data/doc/cxxapi/inherit__graph__12.map +0 -1
  137. data/doc/cxxapi/inherit__graph__12.md5 +0 -1
  138. data/doc/cxxapi/inherit__graph__12.png +0 -0
  139. data/doc/cxxapi/inherit__graph__13.map +0 -1
  140. data/doc/cxxapi/inherit__graph__13.md5 +0 -1
  141. data/doc/cxxapi/inherit__graph__13.png +0 -0
  142. data/doc/cxxapi/inherit__graph__14.map +0 -2
  143. data/doc/cxxapi/inherit__graph__14.md5 +0 -1
  144. data/doc/cxxapi/inherit__graph__14.png +0 -0
  145. data/doc/cxxapi/inherit__graph__15.map +0 -1
  146. data/doc/cxxapi/inherit__graph__15.md5 +0 -1
  147. data/doc/cxxapi/inherit__graph__15.png +0 -0
  148. data/doc/cxxapi/inherit__graph__16.map +0 -1
  149. data/doc/cxxapi/inherit__graph__16.md5 +0 -1
  150. data/doc/cxxapi/inherit__graph__16.png +0 -0
  151. data/doc/cxxapi/inherit__graph__17.map +0 -1
  152. data/doc/cxxapi/inherit__graph__17.md5 +0 -1
  153. data/doc/cxxapi/inherit__graph__17.png +0 -0
  154. data/doc/cxxapi/inherit__graph__2.map +0 -1
  155. data/doc/cxxapi/inherit__graph__2.md5 +0 -1
  156. data/doc/cxxapi/inherit__graph__2.png +0 -0
  157. data/doc/cxxapi/inherit__graph__3.map +0 -1
  158. data/doc/cxxapi/inherit__graph__3.md5 +0 -1
  159. data/doc/cxxapi/inherit__graph__3.png +0 -0
  160. data/doc/cxxapi/inherit__graph__4.map +0 -1
  161. data/doc/cxxapi/inherit__graph__4.md5 +0 -1
  162. data/doc/cxxapi/inherit__graph__4.png +0 -0
  163. data/doc/cxxapi/inherit__graph__5.map +0 -1
  164. data/doc/cxxapi/inherit__graph__5.md5 +0 -1
  165. data/doc/cxxapi/inherit__graph__5.png +0 -0
  166. data/doc/cxxapi/inherit__graph__6.map +0 -1
  167. data/doc/cxxapi/inherit__graph__6.md5 +0 -1
  168. data/doc/cxxapi/inherit__graph__6.png +0 -0
  169. data/doc/cxxapi/inherit__graph__7.map +0 -1
  170. data/doc/cxxapi/inherit__graph__7.md5 +0 -1
  171. data/doc/cxxapi/inherit__graph__7.png +0 -0
  172. data/doc/cxxapi/inherit__graph__8.map +0 -1
  173. data/doc/cxxapi/inherit__graph__8.md5 +0 -1
  174. data/doc/cxxapi/inherit__graph__8.png +0 -0
  175. data/doc/cxxapi/inherit__graph__9.map +0 -2
  176. data/doc/cxxapi/inherit__graph__9.md5 +0 -1
  177. data/doc/cxxapi/inherit__graph__9.png +0 -0
  178. data/doc/cxxapi/inherits.html +0 -102
  179. data/doc/cxxapi/main.html +0 -27
  180. data/doc/cxxapi/modules.html +0 -34
  181. data/doc/cxxapi/namespacePassenger.html +0 -208
  182. data/doc/cxxapi/namespacePassenger_1_1InterruptableCalls.html +0 -43
  183. data/doc/cxxapi/namespacemembers.html +0 -70
  184. data/doc/cxxapi/namespacemembers_func.html +0 -66
  185. data/doc/cxxapi/namespacemembers_type.html +0 -46
  186. data/doc/cxxapi/namespaces.html +0 -35
  187. data/doc/cxxapi/structPassenger_1_1AnythingToString-members.html +0 -33
  188. data/doc/cxxapi/structPassenger_1_1AnythingToString.html +0 -49
  189. data/doc/cxxapi/structPassenger_1_1AnythingToString_3_01vector_3_01string_01_4_01_4-members.html +0 -33
  190. data/doc/cxxapi/structPassenger_1_1AnythingToString_3_01vector_3_01string_01_4_01_4.html +0 -49
  191. data/doc/cxxapi/tab_b.gif +0 -0
  192. data/doc/cxxapi/tab_l.gif +0 -0
  193. data/doc/cxxapi/tab_r.gif +0 -0
  194. data/doc/cxxapi/tabs.css +0 -102
  195. data/doc/cxxapi/tree.html +0 -166
  196. data/doc/rdoc/classes/ConditionVariable.html +0 -160
  197. data/doc/rdoc/classes/Exception.html +0 -120
  198. data/doc/rdoc/classes/GC.html +0 -113
  199. data/doc/rdoc/classes/IO.html +0 -150
  200. data/doc/rdoc/classes/Passenger.html +0 -136
  201. data/doc/rdoc/classes/Passenger/AbstractRequestHandler.html +0 -401
  202. data/doc/rdoc/classes/Passenger/AbstractServer.html +0 -649
  203. data/doc/rdoc/classes/Passenger/AbstractServer/ServerAlreadyStarted.html +0 -97
  204. data/doc/rdoc/classes/Passenger/AbstractServer/ServerError.html +0 -96
  205. data/doc/rdoc/classes/Passenger/AbstractServer/ServerNotStarted.html +0 -97
  206. data/doc/rdoc/classes/Passenger/AbstractServer/UnknownMessage.html +0 -96
  207. data/doc/rdoc/classes/Passenger/AppInitError.html +0 -137
  208. data/doc/rdoc/classes/Passenger/Application.html +0 -296
  209. data/doc/rdoc/classes/Passenger/ConsoleTextTemplate.html +0 -172
  210. data/doc/rdoc/classes/Passenger/FrameworkInitError.html +0 -143
  211. data/doc/rdoc/classes/Passenger/HTMLTemplate.html +0 -175
  212. data/doc/rdoc/classes/Passenger/InitializationError.html +0 -141
  213. data/doc/rdoc/classes/Passenger/MessageChannel.html +0 -488
  214. data/doc/rdoc/classes/Passenger/NativeSupport.html +0 -320
  215. data/doc/rdoc/classes/Passenger/SpawnManager.html +0 -375
  216. data/doc/rdoc/classes/Passenger/UnknownError.html +0 -125
  217. data/doc/rdoc/classes/Passenger/Utils.html +0 -580
  218. data/doc/rdoc/classes/Passenger/VersionNotFound.html +0 -140
  219. data/doc/rdoc/classes/PlatformInfo.html +0 -292
  220. data/doc/rdoc/classes/RakeExtensions.html +0 -197
  221. data/doc/rdoc/created.rid +0 -1
  222. data/doc/rdoc/files/DEVELOPERS_TXT.html +0 -230
  223. data/doc/rdoc/files/README.html +0 -150
  224. data/doc/rdoc/files/ext/passenger/native_support_c.html +0 -92
  225. data/doc/rdoc/files/lib/passenger/abstract_request_handler_rb.html +0 -125
  226. data/doc/rdoc/files/lib/passenger/abstract_server_rb.html +0 -127
  227. data/doc/rdoc/files/lib/passenger/application_rb.html +0 -123
  228. data/doc/rdoc/files/lib/passenger/console_text_template_rb.html +0 -122
  229. data/doc/rdoc/files/lib/passenger/constants_rb.html +0 -114
  230. data/doc/rdoc/files/lib/passenger/dependencies_rb.html +0 -130
  231. data/doc/rdoc/files/lib/passenger/exceptions_rb.html +0 -118
  232. data/doc/rdoc/files/lib/passenger/html_template_rb.html +0 -122
  233. data/doc/rdoc/files/lib/passenger/message_channel_rb.html +0 -118
  234. data/doc/rdoc/files/lib/passenger/platform_info_rb.html +0 -122
  235. data/doc/rdoc/files/lib/passenger/simple_benchmarking_rb.html +0 -118
  236. data/doc/rdoc/files/lib/passenger/spawn_manager_rb.html +0 -139
  237. data/doc/rdoc/files/lib/passenger/utils_rb.html +0 -130
  238. data/doc/rdoc/files/lib/rake/extensions_rb.html +0 -122
  239. data/doc/rdoc/fr_class_index.html +0 -71
  240. data/doc/rdoc/fr_file_index.html +0 -63
  241. data/doc/rdoc/fr_method_index.html +0 -120
  242. data/doc/rdoc/index.html +0 -26
  243. data/doc/rdoc/rdoc-style.css +0 -187
@@ -1,36 +0,0 @@
1
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2
- <html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
3
- <title>Passenger: Member List</title>
4
- <link href="doxygen.css" rel="stylesheet" type="text/css">
5
- <link href="tabs.css" rel="stylesheet" type="text/css">
6
- </head><body>
7
- <!-- Generated by Doxygen 1.5.5 -->
8
- <div class="navigation" id="top">
9
- <div class="tabs">
10
- <ul>
11
- <li><a href="main.html"><span>Main&nbsp;Page</span></a></li>
12
- <li><a href="modules.html"><span>Modules</span></a></li>
13
- <li><a href="namespaces.html"><span>Namespaces</span></a></li>
14
- <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
15
- <li><a href="files.html"><span>Files</span></a></li>
16
- </ul>
17
- </div>
18
- <div class="tabs">
19
- <ul>
20
- <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
21
- <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
22
- <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
23
- </ul>
24
- </div>
25
- </div>
26
- <div class="contents">
27
- <h1>Passenger::ApplicationPoolServer Member List</h1>This is the complete list of members for <a class="el" href="classPassenger_1_1ApplicationPoolServer.html">Passenger::ApplicationPoolServer</a>, including all inherited members.<p><table>
28
- <tr class="memlist"><td><a class="el" href="classPassenger_1_1ApplicationPoolServer.html#2203db62a022579d569ceddff8ef6ca9">ApplicationPoolServer</a>(const string &amp;serverExecutable, const string &amp;spawnServerCommand, const string &amp;logFile=&quot;&quot;, const string &amp;rubyCommand=&quot;ruby&quot;, const string &amp;user=&quot;&quot;)</td><td><a class="el" href="classPassenger_1_1ApplicationPoolServer.html">Passenger::ApplicationPoolServer</a></td><td><code> [inline]</code></td></tr>
29
- <tr class="memlist"><td><a class="el" href="classPassenger_1_1ApplicationPoolServer.html#18f77057cc28e7924a8f4d1397aa0468">connect</a>()</td><td><a class="el" href="classPassenger_1_1ApplicationPoolServer.html">Passenger::ApplicationPoolServer</a></td><td><code> [inline]</code></td></tr>
30
- <tr class="memlist"><td><a class="el" href="classPassenger_1_1ApplicationPoolServer.html#b13957e32ae8ca36ba85f2e6ffefd5ce">detach</a>()</td><td><a class="el" href="classPassenger_1_1ApplicationPoolServer.html">Passenger::ApplicationPoolServer</a></td><td><code> [inline]</code></td></tr>
31
- </table></div>
32
- <hr size="1"><address style="text-align: right;"><small>Generated on Tue Jun 24 14:03:44 2008 for Passenger by&nbsp;
33
- <a href="http://www.doxygen.org/index.html">
34
- <img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
35
- </body>
36
- </html>
@@ -1,225 +0,0 @@
1
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2
- <html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
3
- <title>Passenger: Passenger::ApplicationPoolServer Class Reference</title>
4
- <link href="doxygen.css" rel="stylesheet" type="text/css">
5
- <link href="tabs.css" rel="stylesheet" type="text/css">
6
- </head><body>
7
- <!-- Generated by Doxygen 1.5.5 -->
8
- <div class="navigation" id="top">
9
- <div class="tabs">
10
- <ul>
11
- <li><a href="main.html"><span>Main&nbsp;Page</span></a></li>
12
- <li><a href="modules.html"><span>Modules</span></a></li>
13
- <li><a href="namespaces.html"><span>Namespaces</span></a></li>
14
- <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
15
- <li><a href="files.html"><span>Files</span></a></li>
16
- </ul>
17
- </div>
18
- <div class="tabs">
19
- <ul>
20
- <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
21
- <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
22
- <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
23
- </ul>
24
- </div>
25
- <div class="navpath"><a class="el" href="namespacePassenger.html">Passenger</a>::<a class="el" href="classPassenger_1_1ApplicationPoolServer.html">ApplicationPoolServer</a>
26
- </div>
27
- </div>
28
- <div class="contents">
29
- <h1>Passenger::ApplicationPoolServer Class Reference<br>
30
- <small>
31
- [<a class="el" href="group__Support.html">Apache-independent support classes and function</a>]</small>
32
- </h1><!-- doxytag: class="Passenger::ApplicationPoolServer" --><code>#include &lt;<a class="el" href="ApplicationPoolServer_8h-source.html">ApplicationPoolServer.h</a>&gt;</code>
33
- <p>
34
-
35
- <p>
36
- <a href="classPassenger_1_1ApplicationPoolServer-members.html">List of all members.</a><hr><a name="_details"></a><h2>Detailed Description</h2>
37
- Multi-process usage support for <a class="el" href="classPassenger_1_1ApplicationPool.html" title="A persistent pool of Applications.">ApplicationPool</a>.
38
- <p>
39
- <a class="el" href="classPassenger_1_1ApplicationPoolServer.html" title="Multi-process usage support for ApplicationPool.">ApplicationPoolServer</a> implements a client/server architecture for <a class="el" href="classPassenger_1_1ApplicationPool.html" title="A persistent pool of Applications.">ApplicationPool</a>. This allows one to use <a class="el" href="classPassenger_1_1ApplicationPool.html" title="A persistent pool of Applications.">ApplicationPool</a> in a multi-process environment (unlike <a class="el" href="classPassenger_1_1StandardApplicationPool.html" title="A standard implementation of ApplicationPool for single-process environments.">StandardApplicationPool</a>). The cache/pool data is stored in the server. Different processes can then access the pool through the server.<p>
40
- <a class="el" href="classPassenger_1_1ApplicationPoolServer.html" title="Multi-process usage support for ApplicationPool.">ApplicationPoolServer</a> itself does not inherit <a class="el" href="classPassenger_1_1ApplicationPool.html" title="A persistent pool of Applications.">ApplicationPool</a>. Instead, it returns an <a class="el" href="classPassenger_1_1ApplicationPool.html" title="A persistent pool of Applications.">ApplicationPool</a> object via the <a class="el" href="classPassenger_1_1ApplicationPoolServer.html#18f77057cc28e7924a8f4d1397aa0468" title="Connects to the server and returns a usable ApplicationPool object.">connect()</a> call. For example: <div class="fragment"><pre class="fragment"> <span class="comment">// Create an ApplicationPoolServer.</span>
41
- <a class="code" href="classPassenger_1_1ApplicationPoolServer.html#2203db62a022579d569ceddff8ef6ca9" title="Create a new ApplicationPoolServer object.">ApplicationPoolServer</a> server(...);
42
-
43
- <span class="comment">// Now fork a child process, like Apache's prefork MPM eventually will.</span>
44
- pid_t pid = fork();
45
- <span class="keywordflow">if</span> (pid == 0) {
46
- <span class="comment">// Child process</span>
47
-
48
- <span class="comment">// Connect to the server. After connection, we have an ApplicationPool</span>
49
- <span class="comment">// object!</span>
50
- ApplicationPoolPtr pool(server.connect());
51
-
52
- <span class="comment">// We don't need to connect to the server anymore, so we detach from it.</span>
53
- <span class="comment">// This frees up some resources, such as file descriptors.</span>
54
- server.detach();
55
-
56
- ApplicationPool::SessionPtr session(pool-&gt;get(<span class="stringliteral">"/home/webapps/foo"</span>));
57
- do_something_with(session);
58
-
59
- _exit(0);
60
- } <span class="keywordflow">else</span> {
61
- <span class="comment">// Parent process</span>
62
- waitpid(pid, NULL, 0);
63
- }
64
- </pre></div><p>
65
- <h2>Implementation notes</h2>
66
- <p>
67
- <h3>Separate server executable</h3>
68
- <p>
69
- The actual server is implemented in ApplicationPoolServerExecutable.cpp, this class is just a convenience class for starting/stopping the server executable and connecting to it.<p>
70
- In the past, the server logic itself was implemented in this class. This implies that the <a class="el" href="classPassenger_1_1ApplicationPool.html" title="A persistent pool of Applications.">ApplicationPool</a> server ran inside the Apache process. This presented us with several problems:<ul>
71
- <li>Because of the usage of threads in the <a class="el" href="classPassenger_1_1ApplicationPool.html" title="A persistent pool of Applications.">ApplicationPool</a> server, the Apache VM size would go way up. This gave people the (wrong) impression that <a class="el" href="namespacePassenger.html" title="Support for interruption of blocking system calls and C library calls.">Passenger</a> uses a lot of memory, or that it leaks memory.</li><li>Although it's not entirely confirmed, we suspect that it caused heap fragmentation as well. Apache allocates lots and lots of small objects on the heap, and <a class="el" href="classPassenger_1_1ApplicationPool.html" title="A persistent pool of Applications.">ApplicationPool</a> server isn't exactly helping. This too gave people the (wrong) impression that <a class="el" href="namespacePassenger.html" title="Support for interruption of blocking system calls and C library calls.">Passenger</a> leaks memory.</li><li>It would unnecessarily bloat the VM size of Apache worker processes.</li><li>We had to resort to all kinds of tricks to make sure that fork()ing a process doesn't result in file descriptor leaks.</li><li>Despite everything, there was still a small chance that file descriptor leaks would occur, and this could not be fixed. The reason for this is that the Apache control process may call fork() right after the <a class="el" href="classPassenger_1_1ApplicationPool.html" title="A persistent pool of Applications.">ApplicationPool</a> server has established a new connection with a client.</li></ul>
72
- <p>
73
- Because of these problems, it was decided to split the <a class="el" href="classPassenger_1_1ApplicationPool.html" title="A persistent pool of Applications.">ApplicationPool</a> server to a separate executable. This comes with no performance hit.<p>
74
- <h3>Anonymous server socket</h3>
75
- <p>
76
- Notice that <a class="el" href="classPassenger_1_1ApplicationPoolServer.html" title="Multi-process usage support for ApplicationPool.">ApplicationPoolServer</a> does do not use TCP sockets at all, or even named Unix sockets, despite being a server that can handle multiple clients! So <a class="el" href="classPassenger_1_1ApplicationPoolServer.html" title="Multi-process usage support for ApplicationPool.">ApplicationPoolServer</a> will expose no open ports or temporary Unix socket files. Only child processes are able to use the <a class="el" href="classPassenger_1_1ApplicationPoolServer.html" title="Multi-process usage support for ApplicationPool.">ApplicationPoolServer</a>.<p>
77
- This is implemented through anonymous Unix sockets (<code>socketpair()</code>) and file descriptor passing. It allows one to emulate <code>accept()</code>. <a class="el" href="classPassenger_1_1ApplicationPoolServer.html" title="Multi-process usage support for ApplicationPool.">ApplicationPoolServer</a> is connected to the server executable through a Unix socket pair. <a class="el" href="classPassenger_1_1ApplicationPoolServer.html#18f77057cc28e7924a8f4d1397aa0468" title="Connects to the server and returns a usable ApplicationPool object.">connect()</a> sends a connect request to the server through that socket. The server will then create a new socket pair, and pass one of them back. This new socket pair represents the newly established connection. <table border="0" cellpadding="0" cellspacing="0">
78
- <tr><td></td></tr>
79
- <tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
80
- <tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1ApplicationPoolServer.html#2203db62a022579d569ceddff8ef6ca9">ApplicationPoolServer</a> (const string &amp;serverExecutable, const string &amp;spawnServerCommand, const string &amp;logFile=&quot;&quot;, const string &amp;rubyCommand=&quot;ruby&quot;, const string &amp;user=&quot;&quot;)</td></tr>
81
-
82
- <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Create a new <a class="el" href="classPassenger_1_1ApplicationPoolServer.html" title="Multi-process usage support for ApplicationPool.">ApplicationPoolServer</a> object. <a href="#2203db62a022579d569ceddff8ef6ca9"></a><br></td></tr>
83
- <tr><td class="memItemLeft" nowrap align="right" valign="top">ApplicationPoolPtr&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1ApplicationPoolServer.html#18f77057cc28e7924a8f4d1397aa0468">connect</a> ()</td></tr>
84
-
85
- <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Connects to the server and returns a usable <a class="el" href="classPassenger_1_1ApplicationPool.html" title="A persistent pool of Applications.">ApplicationPool</a> object. <a href="#18f77057cc28e7924a8f4d1397aa0468"></a><br></td></tr>
86
- <tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1ApplicationPoolServer.html#b13957e32ae8ca36ba85f2e6ffefd5ce">detach</a> ()</td></tr>
87
-
88
- <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Detach the server, thereby telling it that we don't want to connect to it anymore. <a href="#b13957e32ae8ca36ba85f2e6ffefd5ce"></a><br></td></tr>
89
- </table>
90
- <hr><h2>Constructor &amp; Destructor Documentation</h2>
91
- <a class="anchor" name="2203db62a022579d569ceddff8ef6ca9"></a><!-- doxytag: member="Passenger::ApplicationPoolServer::ApplicationPoolServer" ref="2203db62a022579d569ceddff8ef6ca9" args="(const string &amp;serverExecutable, const string &amp;spawnServerCommand, const string &amp;logFile=&quot;&quot;, const string &amp;rubyCommand=&quot;ruby&quot;, const string &amp;user=&quot;&quot;)" -->
92
- <div class="memitem">
93
- <div class="memproto">
94
- <table class="memname">
95
- <tr>
96
- <td class="memname">Passenger::ApplicationPoolServer::ApplicationPoolServer </td>
97
- <td>(</td>
98
- <td class="paramtype">const string &amp;&nbsp;</td>
99
- <td class="paramname"> <em>serverExecutable</em>, </td>
100
- </tr>
101
- <tr>
102
- <td class="paramkey"></td>
103
- <td></td>
104
- <td class="paramtype">const string &amp;&nbsp;</td>
105
- <td class="paramname"> <em>spawnServerCommand</em>, </td>
106
- </tr>
107
- <tr>
108
- <td class="paramkey"></td>
109
- <td></td>
110
- <td class="paramtype">const string &amp;&nbsp;</td>
111
- <td class="paramname"> <em>logFile</em> = <code>&quot;&quot;</code>, </td>
112
- </tr>
113
- <tr>
114
- <td class="paramkey"></td>
115
- <td></td>
116
- <td class="paramtype">const string &amp;&nbsp;</td>
117
- <td class="paramname"> <em>rubyCommand</em> = <code>&quot;ruby&quot;</code>, </td>
118
- </tr>
119
- <tr>
120
- <td class="paramkey"></td>
121
- <td></td>
122
- <td class="paramtype">const string &amp;&nbsp;</td>
123
- <td class="paramname"> <em>user</em> = <code>&quot;&quot;</code></td><td>&nbsp;</td>
124
- </tr>
125
- <tr>
126
- <td></td>
127
- <td>)</td>
128
- <td></td><td></td><td width="100%"><code> [inline]</code></td>
129
- </tr>
130
- </table>
131
- </div>
132
- <div class="memdoc">
133
-
134
- <p>
135
- Create a new <a class="el" href="classPassenger_1_1ApplicationPoolServer.html" title="Multi-process usage support for ApplicationPool.">ApplicationPoolServer</a> object.
136
- <p>
137
- <dl compact><dt><b>Parameters:</b></dt><dd>
138
- <table border="0" cellspacing="2" cellpadding="0">
139
- <tr><td valign="top"></td><td valign="top"><em>serverExecutable</em>&nbsp;</td><td>The filename of the <a class="el" href="classPassenger_1_1ApplicationPool.html" title="A persistent pool of Applications.">ApplicationPool</a> server executable to use. </td></tr>
140
- <tr><td valign="top"></td><td valign="top"><em>spawnServerCommand</em>&nbsp;</td><td>The filename of the spawn server to use. </td></tr>
141
- <tr><td valign="top"></td><td valign="top"><em>logFile</em>&nbsp;</td><td>Specify a log file that the spawn server should use. Messages on its standard output and standard error channels will be written to this log file. If an empty string is specified, no log file will be used, and the spawn server will use the same standard output/error channels as the current process. </td></tr>
142
- <tr><td valign="top"></td><td valign="top"><em>rubyCommand</em>&nbsp;</td><td>The Ruby interpreter's command. </td></tr>
143
- <tr><td valign="top"></td><td valign="top"><em>user</em>&nbsp;</td><td>The user that the spawn manager should run as. This parameter only has effect if the current process is running as root. If the empty string is given, or if the <code>user</code> is not a valid username, then the spawn manager will be run as the current user. </td></tr>
144
- </table>
145
- </dl>
146
- <dl compact><dt><b>Exceptions:</b></dt><dd>
147
- <table border="0" cellspacing="2" cellpadding="0">
148
- <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 trying to setup the spawn server or the server socket. </td></tr>
149
- <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classPassenger_1_1IOException.html" title="Represents an error that occured during an I/O operation.">IOException</a></em>&nbsp;</td><td>The specified log file could not be opened. </td></tr>
150
- </table>
151
- </dl>
152
-
153
- </div>
154
- </div><p>
155
- <hr><h2>Member Function Documentation</h2>
156
- <a class="anchor" name="18f77057cc28e7924a8f4d1397aa0468"></a><!-- doxytag: member="Passenger::ApplicationPoolServer::connect" ref="18f77057cc28e7924a8f4d1397aa0468" args="()" -->
157
- <div class="memitem">
158
- <div class="memproto">
159
- <table class="memname">
160
- <tr>
161
- <td class="memname">ApplicationPoolPtr Passenger::ApplicationPoolServer::connect </td>
162
- <td>(</td>
163
- <td class="paramname"> </td>
164
- <td>&nbsp;)&nbsp;</td>
165
- <td width="100%"><code> [inline]</code></td>
166
- </tr>
167
- </table>
168
- </div>
169
- <div class="memdoc">
170
-
171
- <p>
172
- Connects to the server and returns a usable <a class="el" href="classPassenger_1_1ApplicationPool.html" title="A persistent pool of Applications.">ApplicationPool</a> object.
173
- <p>
174
- All cache/pool data of this <a class="el" href="classPassenger_1_1ApplicationPool.html" title="A persistent pool of Applications.">ApplicationPool</a> is actually stored on the server and shared with other clients, but that is totally transparent to the user of the <a class="el" href="classPassenger_1_1ApplicationPool.html" title="A persistent pool of Applications.">ApplicationPool</a> object.<p>
175
- <dl class="note" compact><dt><b>Note:</b></dt><dd>All methods of the returned <a class="el" href="classPassenger_1_1ApplicationPool.html" title="A persistent pool of Applications.">ApplicationPool</a> object may throw <a class="el" href="classPassenger_1_1SystemException.html" title="Represents an error returned by a system call or a standard library call.">SystemException</a>, <a class="el" href="classPassenger_1_1IOException.html" title="Represents an error that occured during an I/O operation.">IOException</a> or boost::thread_interrupted.</dd></dl>
176
- <dl class="warning" compact><dt><b>Warning:</b></dt><dd>One may only use the returned <a class="el" href="classPassenger_1_1ApplicationPool.html" title="A persistent pool of Applications.">ApplicationPool</a> object for handling one session at a time. For example, don't do stuff like this: <div class="fragment"><pre class="fragment"> ApplicationPoolPtr pool = server.connect();
177
- <a class="code" href="classPassenger_1_1Application.html#d14f673494991460b16246a527ad8ad9" title="Convenient alias for Session smart pointer.">Application::SessionPtr</a> session1 = pool-&gt;get(...);
178
- <a class="code" href="classPassenger_1_1Application.html#d14f673494991460b16246a527ad8ad9" title="Convenient alias for Session smart pointer.">Application::SessionPtr</a> session2 = pool-&gt;get(...);
179
- </pre></div> Otherwise, a deadlock can occur under certain circumstances. <p>
180
- Instead, one should call <a class="el" href="classPassenger_1_1ApplicationPoolServer.html#18f77057cc28e7924a8f4d1397aa0468" title="Connects to the server and returns a usable ApplicationPool object.">connect()</a> multiple times: <div class="fragment"><pre class="fragment"> ApplicationPoolPtr pool1 = server.connect();
181
- <a class="code" href="classPassenger_1_1Application.html#d14f673494991460b16246a527ad8ad9" title="Convenient alias for Session smart pointer.">Application::SessionPtr</a> session1 = pool1-&gt;get(...);
182
-
183
- ApplicationPoolPtr pool2 = server.connect();
184
- <a class="code" href="classPassenger_1_1Application.html#d14f673494991460b16246a527ad8ad9" title="Convenient alias for Session smart pointer.">Application::SessionPtr</a> session2 = pool2-&gt;get(...);
185
- </pre></div></dd></dl>
186
- <dl compact><dt><b>Exceptions:</b></dt><dd>
187
- <table border="0" cellspacing="2" cellpadding="0">
188
- <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. </td></tr>
189
- <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classPassenger_1_1IOException.html" title="Represents an error that occured during an I/O operation.">IOException</a></em>&nbsp;</td><td>Something went wrong. </td></tr>
190
- </table>
191
- </dl>
192
-
193
- </div>
194
- </div><p>
195
- <a class="anchor" name="b13957e32ae8ca36ba85f2e6ffefd5ce"></a><!-- doxytag: member="Passenger::ApplicationPoolServer::detach" ref="b13957e32ae8ca36ba85f2e6ffefd5ce" args="()" -->
196
- <div class="memitem">
197
- <div class="memproto">
198
- <table class="memname">
199
- <tr>
200
- <td class="memname">void Passenger::ApplicationPoolServer::detach </td>
201
- <td>(</td>
202
- <td class="paramname"> </td>
203
- <td>&nbsp;)&nbsp;</td>
204
- <td width="100%"><code> [inline]</code></td>
205
- </tr>
206
- </table>
207
- </div>
208
- <div class="memdoc">
209
-
210
- <p>
211
- Detach the server, thereby telling it that we don't want to connect to it anymore.
212
- <p>
213
- This frees up some resources in the current process, such as file descriptors.<p>
214
- This method is particularily useful to Apache worker processes that have just established a connection with the <a class="el" href="classPassenger_1_1ApplicationPool.html" title="A persistent pool of Applications.">ApplicationPool</a> server. Any sessions that are opened prior to calling <a class="el" href="classPassenger_1_1ApplicationPoolServer.html#b13957e32ae8ca36ba85f2e6ffefd5ce" title="Detach the server, thereby telling it that we don&#39;t want to connect to it anymore...">detach()</a>, will keep working even after a <a class="el" href="classPassenger_1_1ApplicationPoolServer.html#b13957e32ae8ca36ba85f2e6ffefd5ce" title="Detach the server, thereby telling it that we don&#39;t want to connect to it anymore...">detach()</a>.<p>
215
- This method may only be called once. The <a class="el" href="classPassenger_1_1ApplicationPoolServer.html" title="Multi-process usage support for ApplicationPool.">ApplicationPoolServer</a> object will become unusable once <a class="el" href="classPassenger_1_1ApplicationPoolServer.html#b13957e32ae8ca36ba85f2e6ffefd5ce" title="Detach the server, thereby telling it that we don&#39;t want to connect to it anymore...">detach()</a> has been called, so call <a class="el" href="classPassenger_1_1ApplicationPoolServer.html#18f77057cc28e7924a8f4d1397aa0468" title="Connects to the server and returns a usable ApplicationPool object.">connect()</a> before calling <a class="el" href="classPassenger_1_1ApplicationPoolServer.html#b13957e32ae8ca36ba85f2e6ffefd5ce" title="Detach the server, thereby telling it that we don&#39;t want to connect to it anymore...">detach()</a>.
216
- </div>
217
- </div><p>
218
- <hr>The documentation for this class was generated from the following file:<ul>
219
- <li><a class="el" href="ApplicationPoolServer_8h-source.html">ApplicationPoolServer.h</a></ul>
220
- </div>
221
- <hr size="1"><address style="text-align: right;"><small>Generated on Tue Jun 24 14:03:44 2008 for Passenger by&nbsp;
222
- <a href="http://www.doxygen.org/index.html">
223
- <img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
224
- </body>
225
- </html>
@@ -1 +0,0 @@
1
- <area shape="rect" href="$classPassenger_1_1StandardApplicationPool.html" title="A standard implementation of ApplicationPool for single&#45;process environments." alt="" coords="5,81,237,105">
@@ -1 +0,0 @@
1
- 6bca4c1eba3f28f05e85d3cd797cf5c4
@@ -1,43 +0,0 @@
1
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2
- <html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
3
- <title>Passenger: Member List</title>
4
- <link href="doxygen.css" rel="stylesheet" type="text/css">
5
- <link href="tabs.css" rel="stylesheet" type="text/css">
6
- </head><body>
7
- <!-- Generated by Doxygen 1.5.5 -->
8
- <div class="navigation" id="top">
9
- <div class="tabs">
10
- <ul>
11
- <li><a href="main.html"><span>Main&nbsp;Page</span></a></li>
12
- <li><a href="modules.html"><span>Modules</span></a></li>
13
- <li><a href="namespaces.html"><span>Namespaces</span></a></li>
14
- <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
15
- <li><a href="files.html"><span>Files</span></a></li>
16
- </ul>
17
- </div>
18
- <div class="tabs">
19
- <ul>
20
- <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
21
- <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
22
- <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
23
- </ul>
24
- </div>
25
- </div>
26
- <div class="contents">
27
- <h1>Passenger::Application::Session Member List</h1>This is the complete list of members for <a class="el" href="classPassenger_1_1Application_1_1Session.html">Passenger::Application::Session</a>, including all inherited members.<p><table>
28
- <tr class="memlist"><td><a class="el" href="classPassenger_1_1Application_1_1Session.html#ddfeda914b17749a70016f5eb384f8a9">closeStream</a>()=0</td><td><a class="el" href="classPassenger_1_1Application_1_1Session.html">Passenger::Application::Session</a></td><td><code> [pure virtual]</code></td></tr>
29
- <tr class="memlist"><td><a class="el" href="classPassenger_1_1Application_1_1Session.html#7f9ad70e75d21130d914d2134061c757">discardStream</a>()=0</td><td><a class="el" href="classPassenger_1_1Application_1_1Session.html">Passenger::Application::Session</a></td><td><code> [pure virtual]</code></td></tr>
30
- <tr class="memlist"><td><a class="el" href="classPassenger_1_1Application_1_1Session.html#2215bec32917c48d1a9f6386b88d018b">getPid</a>() const =0</td><td><a class="el" href="classPassenger_1_1Application_1_1Session.html">Passenger::Application::Session</a></td><td><code> [pure virtual]</code></td></tr>
31
- <tr class="memlist"><td><a class="el" href="classPassenger_1_1Application_1_1Session.html#2631b6d6b4927ec66b1f620df15d8c6e">getStream</a>() const =0</td><td><a class="el" href="classPassenger_1_1Application_1_1Session.html">Passenger::Application::Session</a></td><td><code> [pure virtual]</code></td></tr>
32
- <tr class="memlist"><td><a class="el" href="classPassenger_1_1Application_1_1Session.html#2091e4b60dcbe42ab80fa387610fd669">sendBodyBlock</a>(const char *block, unsigned int size)</td><td><a class="el" href="classPassenger_1_1Application_1_1Session.html">Passenger::Application::Session</a></td><td><code> [inline, virtual]</code></td></tr>
33
- <tr class="memlist"><td><a class="el" href="classPassenger_1_1Application_1_1Session.html#78a4c93fd80f6d913f092c488ea4d360">sendHeaders</a>(const char *headers, unsigned int size)</td><td><a class="el" href="classPassenger_1_1Application_1_1Session.html">Passenger::Application::Session</a></td><td><code> [inline, virtual]</code></td></tr>
34
- <tr class="memlist"><td><a class="el" href="classPassenger_1_1Application_1_1Session.html#4fee03667f626d68c565495bcb19771a">sendHeaders</a>(const string &amp;headers)</td><td><a class="el" href="classPassenger_1_1Application_1_1Session.html">Passenger::Application::Session</a></td><td><code> [inline, virtual]</code></td></tr>
35
- <tr class="memlist"><td><a class="el" href="classPassenger_1_1Application_1_1Session.html#45ad442dc1f4e7b73782bb3395d9e97d">shutdownReader</a>()=0</td><td><a class="el" href="classPassenger_1_1Application_1_1Session.html">Passenger::Application::Session</a></td><td><code> [pure virtual]</code></td></tr>
36
- <tr class="memlist"><td><a class="el" href="classPassenger_1_1Application_1_1Session.html#dff449398adb872c93a9572ae4b701fb">shutdownWriter</a>()=0</td><td><a class="el" href="classPassenger_1_1Application_1_1Session.html">Passenger::Application::Session</a></td><td><code> [pure virtual]</code></td></tr>
37
- <tr class="memlist"><td><a class="el" href="classPassenger_1_1Application_1_1Session.html#4fcaf0670234f7fb2ea6de4b8d8ef38c">~Session</a>()</td><td><a class="el" href="classPassenger_1_1Application_1_1Session.html">Passenger::Application::Session</a></td><td><code> [inline, virtual]</code></td></tr>
38
- </table></div>
39
- <hr size="1"><address style="text-align: right;"><small>Generated on Tue Jun 24 14:03:44 2008 for Passenger by&nbsp;
40
- <a href="http://www.doxygen.org/index.html">
41
- <img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
42
- </body>
43
- </html>
@@ -1,329 +0,0 @@
1
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2
- <html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
3
- <title>Passenger: Passenger::Application::Session Class Reference</title>
4
- <link href="doxygen.css" rel="stylesheet" type="text/css">
5
- <link href="tabs.css" rel="stylesheet" type="text/css">
6
- </head><body>
7
- <!-- Generated by Doxygen 1.5.5 -->
8
- <div class="navigation" id="top">
9
- <div class="tabs">
10
- <ul>
11
- <li><a href="main.html"><span>Main&nbsp;Page</span></a></li>
12
- <li><a href="modules.html"><span>Modules</span></a></li>
13
- <li><a href="namespaces.html"><span>Namespaces</span></a></li>
14
- <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
15
- <li><a href="files.html"><span>Files</span></a></li>
16
- </ul>
17
- </div>
18
- <div class="tabs">
19
- <ul>
20
- <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
21
- <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
22
- <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
23
- </ul>
24
- </div>
25
- <div class="navpath"><a class="el" href="namespacePassenger.html">Passenger</a>::<a class="el" href="classPassenger_1_1Application.html">Application</a>::<a class="el" href="classPassenger_1_1Application_1_1Session.html">Session</a>
26
- </div>
27
- </div>
28
- <div class="contents">
29
- <h1>Passenger::Application::Session Class Reference</h1><!-- doxytag: class="Passenger::Application::Session" --><code>#include &lt;<a class="el" href="Application_8h-source.html">Application.h</a>&gt;</code>
30
- <p>
31
- Inherited by Passenger::Application::StandardSession, and Passenger::ApplicationPoolServer::RemoteSession.
32
- <p>
33
-
34
- <p>
35
- <a href="classPassenger_1_1Application_1_1Session-members.html">List of all members.</a><hr><a name="_details"></a><h2>Detailed Description</h2>
36
- Represents the life time of a single request/response pair of a Ruby on Rails or Rack application.
37
- <p>
38
- <a class="el" href="classPassenger_1_1Application_1_1Session.html" title="Represents the life time of a single request/response pair of a Ruby on Rails or...">Session</a> is used to forward a single HTTP request to a Ruby on Rails/Rack application. A <a class="el" href="classPassenger_1_1Application_1_1Session.html" title="Represents the life time of a single request/response pair of a Ruby on Rails or...">Session</a> has two communication channels: one for reading data from the application, and one for writing data to the application.<p>
39
- In general, a session object is to be used in the following manner:<p>
40
- <ol type=1>
41
- <li>Convert the HTTP request headers into a string, as expected by <a class="el" href="classPassenger_1_1Application_1_1Session.html#78a4c93fd80f6d913f092c488ea4d360" title="Send HTTP request headers to the application.">sendHeaders()</a>. Then send that string by calling <a class="el" href="classPassenger_1_1Application_1_1Session.html#78a4c93fd80f6d913f092c488ea4d360" title="Send HTTP request headers to the application.">sendHeaders()</a>.</li><li>In case of a POST of PUT request, send the HTTP request body by calling <a class="el" href="classPassenger_1_1Application_1_1Session.html#2091e4b60dcbe42ab80fa387610fd669" title="Send a chunk of HTTP request body data to the application.">sendBodyBlock()</a>, possibly multiple times.</li><li>Shutdown the writer channel since you're now done sending data.</li><li>The HTTP response can now be read through the reader channel (<a class="el" href="classPassenger_1_1Application_1_1Session.html#2631b6d6b4927ec66b1f620df15d8c6e" title="Get the I/O stream&#39;s file descriptor.">getStream()</a>).</li><li>When the HTTP response has been read, the session must be closed. This is done by destroying the <a class="el" href="classPassenger_1_1Application_1_1Session.html" title="Represents the life time of a single request/response pair of a Ruby on Rails or...">Session</a> object.</li></ol>
42
- <p>
43
- A usage example is shown in <a class="el" href="classPassenger_1_1Application.html#34636f796ff3924ad5ec142aaa581379" title="Connect to this application instance with the purpose of sending a request to the...">Application::connect()</a>. <table border="0" cellpadding="0" cellspacing="0">
44
- <tr><td></td></tr>
45
- <tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
46
- <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="4fcaf0670234f7fb2ea6de4b8d8ef38c"></a><!-- doxytag: member="Passenger::Application::Session::~Session" ref="4fcaf0670234f7fb2ea6de4b8d8ef38c" args="()" -->
47
- virtual&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1Application_1_1Session.html#4fcaf0670234f7fb2ea6de4b8d8ef38c">~Session</a> ()</td></tr>
48
-
49
- <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Implementing classes might throw arbitrary exceptions. <br></td></tr>
50
- <tr><td class="memItemLeft" nowrap align="right" valign="top">virtual void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1Application_1_1Session.html#78a4c93fd80f6d913f092c488ea4d360">sendHeaders</a> (const char *headers, unsigned int size)</td></tr>
51
-
52
- <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Send HTTP request headers to the application. <a href="#78a4c93fd80f6d913f092c488ea4d360"></a><br></td></tr>
53
- <tr><td class="memItemLeft" nowrap align="right" valign="top">virtual void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1Application_1_1Session.html#4fee03667f626d68c565495bcb19771a">sendHeaders</a> (const string &amp;headers)</td></tr>
54
-
55
- <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Convenience shortcut for <a class="el" href="classPassenger_1_1Application_1_1Session.html#78a4c93fd80f6d913f092c488ea4d360" title="Send HTTP request headers to the application.">sendHeaders(const char *, unsigned int)</a>. <a href="#4fee03667f626d68c565495bcb19771a"></a><br></td></tr>
56
- <tr><td class="memItemLeft" nowrap align="right" valign="top">virtual void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1Application_1_1Session.html#2091e4b60dcbe42ab80fa387610fd669">sendBodyBlock</a> (const char *block, unsigned int size)</td></tr>
57
-
58
- <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Send a chunk of HTTP request body data to the application. <a href="#2091e4b60dcbe42ab80fa387610fd669"></a><br></td></tr>
59
- <tr><td class="memItemLeft" nowrap align="right" valign="top">virtual int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1Application_1_1Session.html#2631b6d6b4927ec66b1f620df15d8c6e">getStream</a> () const =0</td></tr>
60
-
61
- <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get the I/O stream's file descriptor. <a href="#2631b6d6b4927ec66b1f620df15d8c6e"></a><br></td></tr>
62
- <tr><td class="memItemLeft" nowrap align="right" valign="top">virtual void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1Application_1_1Session.html#45ad442dc1f4e7b73782bb3395d9e97d">shutdownReader</a> ()=0</td></tr>
63
-
64
- <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Indicate that we don't want to read data anymore from the I/O stream. <a href="#45ad442dc1f4e7b73782bb3395d9e97d"></a><br></td></tr>
65
- <tr><td class="memItemLeft" nowrap align="right" valign="top">virtual void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1Application_1_1Session.html#dff449398adb872c93a9572ae4b701fb">shutdownWriter</a> ()=0</td></tr>
66
-
67
- <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Indicate that we don't want to write data anymore to the I/O stream. <a href="#dff449398adb872c93a9572ae4b701fb"></a><br></td></tr>
68
- <tr><td class="memItemLeft" nowrap align="right" valign="top">virtual void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1Application_1_1Session.html#ddfeda914b17749a70016f5eb384f8a9">closeStream</a> ()=0</td></tr>
69
-
70
- <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Close the I/O stream. <a href="#ddfeda914b17749a70016f5eb384f8a9"></a><br></td></tr>
71
- <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="7f9ad70e75d21130d914d2134061c757"></a><!-- doxytag: member="Passenger::Application::Session::discardStream" ref="7f9ad70e75d21130d914d2134061c757" args="()=0" -->
72
- virtual void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1Application_1_1Session.html#7f9ad70e75d21130d914d2134061c757">discardStream</a> ()=0</td></tr>
73
-
74
- <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Discard the I/O stream's file descriptor, so that <a class="el" href="classPassenger_1_1Application_1_1Session.html" title="Represents the life time of a single request/response pair of a Ruby on Rails or...">Session</a> won't automatically closed it upon Session's destruction. <br></td></tr>
75
- <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="2215bec32917c48d1a9f6386b88d018b"></a><!-- doxytag: member="Passenger::Application::Session::getPid" ref="2215bec32917c48d1a9f6386b88d018b" args="() const =0" -->
76
- virtual pid_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classPassenger_1_1Application_1_1Session.html#2215bec32917c48d1a9f6386b88d018b">getPid</a> () const =0</td></tr>
77
-
78
- <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get the process ID of the application instance that belongs to this session. <br></td></tr>
79
- </table>
80
- <hr><h2>Member Function Documentation</h2>
81
- <a class="anchor" name="78a4c93fd80f6d913f092c488ea4d360"></a><!-- doxytag: member="Passenger::Application::Session::sendHeaders" ref="78a4c93fd80f6d913f092c488ea4d360" args="(const char *headers, unsigned int size)" -->
82
- <div class="memitem">
83
- <div class="memproto">
84
- <table class="memname">
85
- <tr>
86
- <td class="memname">virtual void Passenger::Application::Session::sendHeaders </td>
87
- <td>(</td>
88
- <td class="paramtype">const char *&nbsp;</td>
89
- <td class="paramname"> <em>headers</em>, </td>
90
- </tr>
91
- <tr>
92
- <td class="paramkey"></td>
93
- <td></td>
94
- <td class="paramtype">unsigned int&nbsp;</td>
95
- <td class="paramname"> <em>size</em></td><td>&nbsp;</td>
96
- </tr>
97
- <tr>
98
- <td></td>
99
- <td>)</td>
100
- <td></td><td></td><td width="100%"><code> [inline, virtual]</code></td>
101
- </tr>
102
- </table>
103
- </div>
104
- <div class="memdoc">
105
-
106
- <p>
107
- Send HTTP request headers to the application.
108
- <p>
109
- The HTTP headers must be converted into CGI headers, and then encoded into a string that matches this grammar:<p>
110
- <div class="fragment"><pre class="fragment">
111
- headers ::= header*
112
- header ::= name NUL value NUL
113
- name ::= notnull+
114
- value ::= notnull+
115
- notnull ::= "\x01" | "\x02" | "\x02" | ... | "\xFF"
116
- NUL = "\x00"
117
- </pre></div><p>
118
- This method should be the first one to be called during the lifetime of a <a class="el" href="classPassenger_1_1Application_1_1Session.html" title="Represents the life time of a single request/response pair of a Ruby on Rails or...">Session</a> object. Otherwise strange things may happen.<p>
119
- <dl compact><dt><b>Parameters:</b></dt><dd>
120
- <table border="0" cellspacing="2" cellpadding="0">
121
- <tr><td valign="top"></td><td valign="top"><em>headers</em>&nbsp;</td><td>The HTTP request headers, converted into CGI headers and encoded as a string, according to the description. </td></tr>
122
- <tr><td valign="top"></td><td valign="top"><em>size</em>&nbsp;</td><td>The size, in bytes, of <code>headers</code>. </td></tr>
123
- </table>
124
- </dl>
125
- <dl class="pre" compact><dt><b>Precondition:</b></dt><dd>headers != NULL </dd></dl>
126
- <dl compact><dt><b>Exceptions:</b></dt><dd>
127
- <table border="0" cellspacing="2" cellpadding="0">
128
- <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classPassenger_1_1IOException.html" title="Represents an error that occured during an I/O operation.">IOException</a></em>&nbsp;</td><td>The writer channel has already been closed. </td></tr>
129
- <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 writing. </td></tr>
130
- <tr><td valign="top"></td><td valign="top"><em>boost::thread_interrupted</em>&nbsp;</td><td></td></tr>
131
- </table>
132
- </dl>
133
-
134
- </div>
135
- </div><p>
136
- <a class="anchor" name="4fee03667f626d68c565495bcb19771a"></a><!-- doxytag: member="Passenger::Application::Session::sendHeaders" ref="4fee03667f626d68c565495bcb19771a" args="(const string &amp;headers)" -->
137
- <div class="memitem">
138
- <div class="memproto">
139
- <table class="memname">
140
- <tr>
141
- <td class="memname">virtual void Passenger::Application::Session::sendHeaders </td>
142
- <td>(</td>
143
- <td class="paramtype">const string &amp;&nbsp;</td>
144
- <td class="paramname"> <em>headers</em> </td>
145
- <td>&nbsp;)&nbsp;</td>
146
- <td width="100%"><code> [inline, virtual]</code></td>
147
- </tr>
148
- </table>
149
- </div>
150
- <div class="memdoc">
151
-
152
- <p>
153
- Convenience shortcut for <a class="el" href="classPassenger_1_1Application_1_1Session.html#78a4c93fd80f6d913f092c488ea4d360" title="Send HTTP request headers to the application.">sendHeaders(const char *, unsigned int)</a>.
154
- <p>
155
- <dl compact><dt><b>Parameters:</b></dt><dd>
156
- <table border="0" cellspacing="2" cellpadding="0">
157
- <tr><td valign="top"></td><td valign="top"><em>headers</em>&nbsp;</td><td></td></tr>
158
- </table>
159
- </dl>
160
- <dl compact><dt><b>Exceptions:</b></dt><dd>
161
- <table border="0" cellspacing="2" cellpadding="0">
162
- <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classPassenger_1_1IOException.html" title="Represents an error that occured during an I/O operation.">IOException</a></em>&nbsp;</td><td>The writer channel has already been closed. </td></tr>
163
- <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 writing. </td></tr>
164
- <tr><td valign="top"></td><td valign="top"><em>boost::thread_interrupted</em>&nbsp;</td><td></td></tr>
165
- </table>
166
- </dl>
167
-
168
- </div>
169
- </div><p>
170
- <a class="anchor" name="2091e4b60dcbe42ab80fa387610fd669"></a><!-- doxytag: member="Passenger::Application::Session::sendBodyBlock" ref="2091e4b60dcbe42ab80fa387610fd669" args="(const char *block, unsigned int size)" -->
171
- <div class="memitem">
172
- <div class="memproto">
173
- <table class="memname">
174
- <tr>
175
- <td class="memname">virtual void Passenger::Application::Session::sendBodyBlock </td>
176
- <td>(</td>
177
- <td class="paramtype">const char *&nbsp;</td>
178
- <td class="paramname"> <em>block</em>, </td>
179
- </tr>
180
- <tr>
181
- <td class="paramkey"></td>
182
- <td></td>
183
- <td class="paramtype">unsigned int&nbsp;</td>
184
- <td class="paramname"> <em>size</em></td><td>&nbsp;</td>
185
- </tr>
186
- <tr>
187
- <td></td>
188
- <td>)</td>
189
- <td></td><td></td><td width="100%"><code> [inline, virtual]</code></td>
190
- </tr>
191
- </table>
192
- </div>
193
- <div class="memdoc">
194
-
195
- <p>
196
- Send a chunk of HTTP request body data to the application.
197
- <p>
198
- You can call this method as many times as is required to transfer the entire HTTP request body.<p>
199
- This method should only be called after a <a class="el" href="classPassenger_1_1Application_1_1Session.html#78a4c93fd80f6d913f092c488ea4d360" title="Send HTTP request headers to the application.">sendHeaders()</a>. Otherwise strange things may happen.<p>
200
- <dl compact><dt><b>Parameters:</b></dt><dd>
201
- <table border="0" cellspacing="2" cellpadding="0">
202
- <tr><td valign="top"></td><td valign="top"><em>block</em>&nbsp;</td><td>A block of HTTP request body data to send. </td></tr>
203
- <tr><td valign="top"></td><td valign="top"><em>size</em>&nbsp;</td><td>The size, in bytes, of <code>block</code>. </td></tr>
204
- </table>
205
- </dl>
206
- <dl compact><dt><b>Exceptions:</b></dt><dd>
207
- <table border="0" cellspacing="2" cellpadding="0">
208
- <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classPassenger_1_1IOException.html" title="Represents an error that occured during an I/O operation.">IOException</a></em>&nbsp;</td><td>The writer channel has already been closed. </td></tr>
209
- <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 writing. </td></tr>
210
- <tr><td valign="top"></td><td valign="top"><em>boost::thread_interrupted</em>&nbsp;</td><td></td></tr>
211
- </table>
212
- </dl>
213
-
214
- </div>
215
- </div><p>
216
- <a class="anchor" name="2631b6d6b4927ec66b1f620df15d8c6e"></a><!-- doxytag: member="Passenger::Application::Session::getStream" ref="2631b6d6b4927ec66b1f620df15d8c6e" args="() const =0" -->
217
- <div class="memitem">
218
- <div class="memproto">
219
- <table class="memname">
220
- <tr>
221
- <td class="memname">virtual int Passenger::Application::Session::getStream </td>
222
- <td>(</td>
223
- <td class="paramname"> </td>
224
- <td>&nbsp;)&nbsp;</td>
225
- <td width="100%"> const<code> [pure virtual]</code></td>
226
- </tr>
227
- </table>
228
- </div>
229
- <div class="memdoc">
230
-
231
- <p>
232
- Get the I/O stream's file descriptor.
233
- <p>
234
- This steam is full-duplex, and will be automatically closed upon Session's destruction, unless <a class="el" href="classPassenger_1_1Application_1_1Session.html#7f9ad70e75d21130d914d2134061c757" title="Discard the I/O stream&#39;s file descriptor, so that Session won&#39;t automatically...">discardStream()</a> is called.<p>
235
- <dl class="pre" compact><dt><b>Precondition:</b></dt><dd>The stream has not been fully closed. </dd></dl>
236
-
237
- </div>
238
- </div><p>
239
- <a class="anchor" name="45ad442dc1f4e7b73782bb3395d9e97d"></a><!-- doxytag: member="Passenger::Application::Session::shutdownReader" ref="45ad442dc1f4e7b73782bb3395d9e97d" args="()=0" -->
240
- <div class="memitem">
241
- <div class="memproto">
242
- <table class="memname">
243
- <tr>
244
- <td class="memname">virtual void Passenger::Application::Session::shutdownReader </td>
245
- <td>(</td>
246
- <td class="paramname"> </td>
247
- <td>&nbsp;)&nbsp;</td>
248
- <td width="100%"><code> [pure virtual]</code></td>
249
- </tr>
250
- </table>
251
- </div>
252
- <div class="memdoc">
253
-
254
- <p>
255
- Indicate that we don't want to read data anymore from the I/O stream.
256
- <p>
257
- Calling this method after <a class="el" href="classPassenger_1_1Application_1_1Session.html#ddfeda914b17749a70016f5eb384f8a9" title="Close the I/O stream.">closeStream()</a> is called will have no effect.<p>
258
- <dl compact><dt><b>Exceptions:</b></dt><dd>
259
- <table border="0" cellspacing="2" cellpadding="0">
260
- <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. </td></tr>
261
- <tr><td valign="top"></td><td valign="top"><em>boost::thread_interrupted</em>&nbsp;</td><td></td></tr>
262
- </table>
263
- </dl>
264
-
265
- </div>
266
- </div><p>
267
- <a class="anchor" name="dff449398adb872c93a9572ae4b701fb"></a><!-- doxytag: member="Passenger::Application::Session::shutdownWriter" ref="dff449398adb872c93a9572ae4b701fb" args="()=0" -->
268
- <div class="memitem">
269
- <div class="memproto">
270
- <table class="memname">
271
- <tr>
272
- <td class="memname">virtual void Passenger::Application::Session::shutdownWriter </td>
273
- <td>(</td>
274
- <td class="paramname"> </td>
275
- <td>&nbsp;)&nbsp;</td>
276
- <td width="100%"><code> [pure virtual]</code></td>
277
- </tr>
278
- </table>
279
- </div>
280
- <div class="memdoc">
281
-
282
- <p>
283
- Indicate that we don't want to write data anymore to the I/O stream.
284
- <p>
285
- Calling this method after <a class="el" href="classPassenger_1_1Application_1_1Session.html#ddfeda914b17749a70016f5eb384f8a9" title="Close the I/O stream.">closeStream()</a> is called will have no effect.<p>
286
- <dl compact><dt><b>Exceptions:</b></dt><dd>
287
- <table border="0" cellspacing="2" cellpadding="0">
288
- <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. </td></tr>
289
- <tr><td valign="top"></td><td valign="top"><em>boost::thread_interrupted</em>&nbsp;</td><td></td></tr>
290
- </table>
291
- </dl>
292
-
293
- </div>
294
- </div><p>
295
- <a class="anchor" name="ddfeda914b17749a70016f5eb384f8a9"></a><!-- doxytag: member="Passenger::Application::Session::closeStream" ref="ddfeda914b17749a70016f5eb384f8a9" args="()=0" -->
296
- <div class="memitem">
297
- <div class="memproto">
298
- <table class="memname">
299
- <tr>
300
- <td class="memname">virtual void Passenger::Application::Session::closeStream </td>
301
- <td>(</td>
302
- <td class="paramname"> </td>
303
- <td>&nbsp;)&nbsp;</td>
304
- <td width="100%"><code> [pure virtual]</code></td>
305
- </tr>
306
- </table>
307
- </div>
308
- <div class="memdoc">
309
-
310
- <p>
311
- Close the I/O stream.
312
- <p>
313
- <dl compact><dt><b>Exceptions:</b></dt><dd>
314
- <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>Something went wrong. </td></tr>
316
- <tr><td valign="top"></td><td valign="top"><em>boost::thread_interrupted</em>&nbsp;</td><td></td></tr>
317
- </table>
318
- </dl>
319
-
320
- </div>
321
- </div><p>
322
- <hr>The documentation for this class was generated from the following file:<ul>
323
- <li><a class="el" href="Application_8h-source.html">Application.h</a></ul>
324
- </div>
325
- <hr size="1"><address style="text-align: right;"><small>Generated on Tue Jun 24 14:03:44 2008 for Passenger by&nbsp;
326
- <a href="http://www.doxygen.org/index.html">
327
- <img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
328
- </body>
329
- </html>