GIF89a; %PDF-1.5 %���� ºaâÚÎΞ-ÌE1ÍØÄ÷{òò2ÿ ÛÖ^ÔÀá TÎ{¦?§®¥kuµùÕ5sLOšuY
Server IP : 134.29.175.74 / Your IP : 216.73.216.160 Web Server : nginx/1.10.2 System : Windows NT CST-WEBSERVER 10.0 build 19045 (Windows 10) i586 User : Administrator ( 0) PHP Version : 7.1.0 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : OFF | Perl : OFF | Python : OFF | Sudo : OFF | Pkexec : OFF Directory : /nginx/html/JimMartinson/CST1611/VM_Data/Install/ApachePerlFiles/Perl/html/site/lib/APR/ |
Upload File : |
<?xml version="1.0" ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head> <!-- saved from url=(0017)http://localhost/ --> <script language="JavaScript" src="../../../displayToc.js"></script> <script language="JavaScript" src="../../../tocParas.js"></script> <script language="JavaScript" src="../../../tocTab.js"></script> <link rel="stylesheet" type="text/css" href="../../../scineplex.css"> <title>APR::Status - Perl Interface to the APR_STATUS_IS_* macros</title> <link rel="stylesheet" href="../../../Active.css" type="text/css" /> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <link rev="made" href="mailto:" /> </head> <body> <!-- INDEX BEGIN --> <div name="index"> <script>writelinks('__top__',3);</script> <h1><a>APR::Status - Perl Interface to the APR_STATUS_IS_* macros</a></h1> <p><a name="__index__"></a></p> <ul> <li><a href="#name">NAME</a></li> <li><a href="#synopsis">Synopsis</a></li> <li><a href="#description">Description</a></li> <li><a href="#functions">Functions</a></li> <ul> <li><a href="#is_eacces"><code>is_EACCES</code></a></li> <li><a href="#is_eagain"><code>is_EAGAIN</code></a></li> <li><a href="#is_enoent"><code>is_ENOENT</code></a></li> <li><a href="#is_eof"><code>is_EOF</code></a></li> <li><a href="#is_econnaborted"><code>is_ECONNABORTED</code></a></li> <li><a href="#is_econnreset"><code>is_ECONNRESET</code></a></li> <li><a href="#is_timeup"><code>is_TIMEUP</code></a></li> </ul> <li><a href="#see_also">See Also</a></li> <li><a href="#copyright">Copyright</a></li> <li><a href="#authors">Authors</a></li> </ul> <hr name="index" /> </div> <!-- INDEX END --> <p> </p> <h1><a name="name">NAME</a></h1> <p>APR::Status - Perl Interface to the APR_STATUS_IS_* macros</p> <p> </p> <hr /> <h1><a name="synopsis">Synopsis</a></h1> <pre> <span class="keyword">use</span> <span class="variable">APR::Status</span> <span class="operator">();</span> <span class="keyword">eval</span> <span class="operator">{</span> <span class="variable">$obj</span><span class="operator">-></span><span class="variable">mp_method</span><span class="operator">()</span> <span class="operator">};</span> <span class="keyword">if</span> <span class="operator">(</span><span class="variable">$@</span> <span class="operator">&&</span> <span class="variable">$ref</span> <span class="variable">$@</span> <span class="keyword">eq</span> <span class="string">'APR::Error'</span> <span class="operator">&&</span> <span class="variable">APR::Status::is_EAGAIN</span><span class="operator">(</span><span class="variable">$@</span><span class="operator">))</span> <span class="operator">{</span> <span class="comment"># APR_STATUS_IS_EAGAIN(s) of apr_errno.h is satisfied</span> <span class="operator">}</span> </pre> <p> </p> <hr /> <h1><a name="description">Description</a></h1> <p>An interface to <em class="file">apr_errno.h</em> composite error codes.</p> <p>As discussed in the <code>APR::Error|docs::2.0::api::APR::Error</code> manpage, it is possible to handle APR/Apache/mod_perl exceptions in the following way:</p> <pre> <span class="keyword">eval</span> <span class="operator">{</span> <span class="variable">$obj</span><span class="operator">-></span><span class="variable">mp_method</span><span class="operator">()</span> <span class="operator">};</span> <span class="keyword">if</span> <span class="operator">(</span><span class="variable">$@</span> <span class="operator">&&</span> <span class="variable">$ref</span> <span class="variable">$@</span> <span class="keyword">eq</span> <span class="string">'APR::Error'</span> <span class="operator">&&</span> <span class="variable">$@</span> <span class="operator">==</span> <span class="variable">$some_code</span><span class="operator">)</span> <span class="keyword">warn</span> <span class="string">"handled exception: $@"</span><span class="operator">;</span> <span class="operator">}</span> </pre> <p>However, in cases where <code>$some_code</code> is an <a href="../../../docs/2.0/api/APR/Const.html">APR::Const constant</a>, there may be more than one condition satisfying the intent of this exception. For this purpose the APR C library provides in <em class="file">apr_errno.h</em> a series of macros, <code>APR_STATUS_IS_*</code>, which are the recommended way to check for such conditions. For example, the <code>APR_STATUS_IS_EAGAIN</code> macro is defined as</p> <pre> #define APR_STATUS_IS_EAGAIN(s) ((s) == APR_EAGAIN \ || (s) == APR_OS_START_SYSERR + ERROR_NO_DATA \ || (s) == APR_OS_START_SYSERR + SOCEWOULDBLOCK \ || (s) == APR_OS_START_SYSERR + ERROR_LOCK_VIOLATION)</pre> <p>The purpose of <code>APR::Status</code> is to provide functions corresponding to these macros.</p> <p> </p> <hr /> <h1><a name="functions">Functions</a></h1> <p> </p> <h2><a name="is_eacces"><code>is_EACCES</code></a></h2> <p>Check if the error is matching <code>EACCES</code> and its variants (corresponds to the <code>APR_STATUS_IS_EACCES</code> macro).</p> <pre> <span class="variable">$status</span> <span class="operator">=</span> <span class="variable">APR::Status::is_EACCES</span><span class="operator">(</span><span class="variable">$error_code</span><span class="operator">);</span> </pre> <dl> <dt><strong><a name="error_code" class="item">arg1: <code>$error_code</code> (integer or <code>APR::Error object|docs::2.0::api::APR::Error</code> )</a></strong> <dd> <p>The error code or to check, normally <a href="../../../lib/pods/perlvar.html#__"><code>$@</code></a> blessed into <code>APR::Error object|docs::2.0::api::APR::Error</code>.</p> </dd> </li> <dt><strong><a name="status" class="item">ret: <code>$status</code> ( boolean )</a></strong> <dt><strong><a name="since_2_0_00267" class="item">since: 2.0.00</a></strong> </dl> <p>An example of using <code>is_EACCES</code> is when reading the contents of a file where access may be forbidden:</p> <pre> <span class="keyword">eval</span> <span class="operator">{</span> <span class="variable">$obj</span><span class="operator">-></span><span class="variable">slurp_filename</span><span class="operator">(</span><span class="number">0</span><span class="operator">)</span> <span class="operator">};</span> <span class="keyword">if</span> <span class="operator">(</span><span class="variable">$@</span><span class="operator">)</span> <span class="operator">{</span> <span class="keyword">return</span> <span class="variable">Apache2::Const::FORBIDDEN</span> <span class="keyword">if</span> <span class="keyword">ref</span> <span class="variable">$@</span> <span class="keyword">eq</span> <span class="string">'APR::Error'</span> <span class="operator">&&</span> <span class="variable">APR::Status::is_EACCES</span><span class="operator">(</span><span class="variable">$@</span><span class="operator">);</span> <span class="keyword">die</span> <span class="variable">$@</span><span class="operator">;</span> <span class="operator">}</span> </pre> <p>Due to possible variants in conditions matching <code>EACCES</code>, the use of this function is recommended for checking error codes against this value, rather than just using <code>APR::Const::EACCES|docs::2.0::api::APR::Const/C_APR__Const__EACCES_</code> directly.</p> <p> </p> <h2><a name="is_eagain"><code>is_EAGAIN</code></a></h2> <p>Check if the error is matching <code>EAGAIN</code> and its variants (corresponds to the <code>APR_STATUS_IS_EAGAIN</code> macro).</p> <pre> <span class="variable">$status</span> <span class="operator">=</span> <span class="variable">APR::Status::is_EAGAIN</span><span class="operator">(</span><span class="variable">$error_code</span><span class="operator">);</span> </pre> <dl> <dt><strong>arg1: <code>$error_code</code> (integer or <code>APR::Error object|docs::2.0::api::APR::Error</code> )</strong> <dd> <p>The error code or to check, normally <a href="../../../lib/pods/perlvar.html#__"><code>$@</code></a> blessed into <code>APR::Error object|docs::2.0::api::APR::Error</code>.</p> </dd> </li> <dt><strong>ret: <code>$status</code> ( boolean )</strong> <dt><strong><a name="since_2_0_00268" class="item">since: 2.0.00</a></strong> </dl> <p>For example, here is how you may want to handle socket read exceptions and do retries:</p> <pre> <span class="keyword">use</span> <span class="variable">APR::Status</span> <span class="operator">();</span> <span class="comment"># ....</span> <span class="keyword">my</span> <span class="variable">$tries</span> <span class="operator">=</span> <span class="number">0</span><span class="operator">;</span> <span class="keyword">my</span> <span class="variable">$buffer</span><span class="operator">;</span> <span class="variable">RETRY</span><span class="operator">:</span> <span class="keyword">my</span> <span class="variable">$rlen</span> <span class="operator">=</span> <span class="keyword">eval</span> <span class="operator">{</span> <span class="variable">$socket</span><span class="operator">-></span><span class="keyword">recv</span><span class="operator">(</span><span class="variable">$buffer</span><span class="operator">,</span> <span class="variable">SIZE</span><span class="operator">)</span> <span class="operator">};</span> <span class="keyword">if</span> <span class="operator">(</span><span class="variable">$@</span> <span class="operator">&&</span> <span class="keyword">ref</span><span class="operator">(</span><span class="variable">$@</span><span class="operator">)</span> <span class="operator">&&</span> <span class="variable">APR::Status::is_EAGAIN</span><span class="operator">(</span><span class="variable">$@</span><span class="operator">))</span> <span class="operator">{</span> <span class="keyword">if</span> <span class="operator">(</span><span class="variable">$tries</span><span class="operator">++</span> <span class="operator"><</span> <span class="number">3</span><span class="operator">)</span> <span class="operator">{</span> <span class="keyword">goto</span> <span class="variable">RETRY</span><span class="operator">;</span> <span class="operator">}</span> <span class="keyword">else</span> <span class="operator">{</span> <span class="comment"># do something else</span> <span class="operator">}</span> <span class="operator">}</span> <span class="keyword">else</span> <span class="operator">{</span> <span class="keyword">die</span> <span class="string">"eval block has failed: $@"</span><span class="operator">;</span> <span class="operator">}</span> </pre> <p>Notice that just checking against <code>APR::Const::EAGAIN|docs::2.0::api::APR::Const/C_APR__Const__EAGAIN_</code> may work on some Unices, but then it will certainly break on win32. Thefore make sure to use this macro and not <code>APR::Const::EAGAIN</code> unless you know what you are doing.</p> <p> </p> <h2><a name="is_enoent"><code>is_ENOENT</code></a></h2> <p>Check if the error is matching <code>ENOENT</code> and its variants (corresponds to the <code>APR_STATUS_IS_ENOENT</code> macro).</p> <pre> <span class="variable">$status</span> <span class="operator">=</span> <span class="variable">APR::Status::is_ENOENT</span><span class="operator">(</span><span class="variable">$error_code</span><span class="operator">);</span> </pre> <dl> <dt><strong>arg1: <code>$error_code</code> (integer or <code>APR::Error object|docs::2.0::api::APR::Error</code> )</strong> <dd> <p>The error code or to check, normally <a href="../../../lib/pods/perlvar.html#__"><code>$@</code></a> blessed into <code>APR::Error object|docs::2.0::api::APR::Error</code>.</p> </dd> </li> <dt><strong>ret: <code>$status</code> ( boolean )</strong> <dt><strong><a name="since_2_0_00269" class="item">since: 2.0.00</a></strong> </dl> <p>An example of using <code>is_ENOENT</code> is when reading the contents of a file which may not exist:</p> <pre> <span class="keyword">eval</span> <span class="operator">{</span> <span class="variable">$obj</span><span class="operator">-></span><span class="variable">slurp_filename</span><span class="operator">(</span><span class="number">0</span><span class="operator">)</span> <span class="operator">};</span> <span class="keyword">if</span> <span class="operator">(</span><span class="variable">$@</span><span class="operator">)</span> <span class="operator">{</span> <span class="keyword">return</span> <span class="variable">Apache2::Const::NOT_FOUND</span> <span class="keyword">if</span> <span class="keyword">ref</span> <span class="variable">$@</span> <span class="keyword">eq</span> <span class="string">'APR::Error'</span> <span class="operator">&&</span> <span class="variable">APR::Status::is_ENOENT</span><span class="operator">(</span><span class="variable">$@</span><span class="operator">);</span> <span class="keyword">die</span> <span class="variable">$@</span><span class="operator">;</span> <span class="operator">}</span> </pre> <p>Due to possible variants in conditions matching <code>ENOENT</code>, the use of this function is recommended for checking error codes against this value, rather than just using <code>APR::Const::ENOENT|docs::2.0::api::APR::Const/C_APR__Const__ENOENT_</code> directly.</p> <p> </p> <h2><a name="is_eof"><code>is_EOF</code></a></h2> <p>Check if the error is matching <code>EOF</code> and its variants (corresponds to the <code>APR_STATUS_IS_EOF</code> macro).</p> <pre> <span class="variable">$status</span> <span class="operator">=</span> <span class="variable">APR::Status::is_EOF</span><span class="operator">(</span><span class="variable">$error_code</span><span class="operator">);</span> </pre> <dl> <dt><strong>arg1: <code>$error_code</code> (integer or <code>APR::Error object|docs::2.0::api::APR::Error</code> )</strong> <dd> <p>The error code or to check, normally <a href="../../../lib/pods/perlvar.html#__"><code>$@</code></a> blessed into <code>APR::Error object|docs::2.0::api::APR::Error</code>.</p> </dd> </li> <dt><strong>ret: <code>$status</code> ( boolean )</strong> <dt><strong><a name="since_2_0_00270" class="item">since: 2.0.00</a></strong> </dl> <p>Due to possible variants in conditions matching <code>EOF</code>, the use of this function is recommended for checking error codes against this value, rather than just using <code>APR::Const::EOF|docs::2.0::api::APR::Const/C_APR__Const__EOF_</code> directly.</p> <p> </p> <h2><a name="is_econnaborted"><code>is_ECONNABORTED</code></a></h2> <p>Check if the error is matching <code>ECONNABORTED</code> and its variants (corresponds to the <code>APR_STATUS_IS_ECONNABORTED</code> macro).</p> <pre> <span class="variable">$status</span> <span class="operator">=</span> <span class="variable">APR::Status::is_ECONNABORTED</span><span class="operator">(</span><span class="variable">$error_code</span><span class="operator">);</span> </pre> <dl> <dt><strong>arg1: <code>$error_code</code> (integer or <code>APR::Error object|docs::2.0::api::APR::Error</code> )</strong> <dd> <p>The error code or to check, normally <a href="../../../lib/pods/perlvar.html#__"><code>$@</code></a> blessed into <code>APR::Error object|docs::2.0::api::APR::Error</code>.</p> </dd> </li> <dt><strong>ret: <code>$status</code> ( boolean )</strong> <dt><strong><a name="since_2_0_00271" class="item">since: 2.0.00</a></strong> </dl> <p>Due to possible variants in conditions matching <code>ECONNABORTED</code>, the use of this function is recommended for checking error codes against this value, rather than just using <code>APR::Const::ECONNABORTED|docs::2.0::api::APR::Const/C_APR__Const__ECONNABORTED_</code> directly.</p> <p> </p> <h2><a name="is_econnreset"><code>is_ECONNRESET</code></a></h2> <p>Check if the error is matching <code>ECONNRESET</code> and its variants (corresponds to the <code>APR_STATUS_IS_ECONNRESET</code> macro).</p> <pre> <span class="variable">$status</span> <span class="operator">=</span> <span class="variable">APR::Status::is_ECONNRESET</span><span class="operator">(</span><span class="variable">$error_code</span><span class="operator">);</span> </pre> <dl> <dt><strong>arg1: <code>$error_code</code> (integer or <code>APR::Error object|docs::2.0::api::APR::Error</code> )</strong> <dd> <p>The error code or to check, normally <a href="../../../lib/pods/perlvar.html#__"><code>$@</code></a> blessed into <code>APR::Error object|docs::2.0::api::APR::Error</code>.</p> </dd> </li> <dt><strong>ret: <code>$status</code> ( boolean )</strong> <dt><strong><a name="since_2_0_00272" class="item">since: 2.0.00</a></strong> </dl> <p>Due to possible variants in conditions matching <code>ECONNRESET</code>, the use of this function is recommended for checking error codes against this value, rather than just using <code>APR::Const::ECONNRESET|docs::2.0::api::APR::Const/C_APR__Const__ECONNRESET_</code> directly.</p> <p> </p> <h2><a name="is_timeup"><code>is_TIMEUP</code></a></h2> <p>Check if the error is matching <code>TIMEUP</code> and its variants (corresponds to the <code>APR_STATUS_IS_TIMEUP</code> macro).</p> <pre> <span class="variable">$status</span> <span class="operator">=</span> <span class="variable">APR::Status::is_TIMEUP</span><span class="operator">(</span><span class="variable">$error_code</span><span class="operator">);</span> </pre> <dl> <dt><strong>arg1: <code>$error_code</code> (integer or <code>APR::Error object|docs::2.0::api::APR::Error</code> )</strong> <dd> <p>The error code or to check, normally <a href="../../../lib/pods/perlvar.html#__"><code>$@</code></a> blessed into <code>APR::Error object|docs::2.0::api::APR::Error</code>.</p> </dd> </li> <dt><strong>ret: <code>$status</code> ( boolean )</strong> <dt><strong><a name="since_2_0_00273" class="item">since: 2.0.00</a></strong> </dl> <p>Due to possible variants in conditions matching <code>TIMEUP</code>, the use of this function is recommended for checking error codes against this value, rather than just using <code>APR::Const::TIMEUP|docs::2.0::api::APR::Const/C_APR__Const__TIMEUP_</code> directly.</p> <p> </p> <hr /> <h1><a name="see_also">See Also</a></h1> <p><a href="../../../docs/2.0/index.html">mod_perl 2.0 documentation</a>.</p> <p> </p> <hr /> <h1><a name="copyright">Copyright</a></h1> <p>mod_perl 2.0 and its core modules are copyrighted under The Apache Software License, Version 2.0.</p> <p> </p> <hr /> <h1><a name="authors">Authors</a></h1> <p><a href="../../../about/contributors/people.html">The mod_perl development team and numerous contributors</a>.</p> </body> </html>