<div dir="ltr">This is partially guesswork, but the code to catchWSError looks dubious:<div><br></div><div>    <span>catchWsError</span><span> </span><span style="color:red">::</span><span> </span><span>WebSockets</span><span> </span><span>p</span><span> </span><span>a</span></div>



<pre><a name="140c1122bae16b2a_140c0fa313e10101_line-251"></a>             <span style="color:red">-&gt;</span> <span style="color:red">(</span><span>SomeException</span> <span style="color:red">-&gt;</span> <span>WebSockets</span> <span>p</span> <span>a</span><span style="color:red">)</span>
<a name="140c1122bae16b2a_140c0fa313e10101_line-252"></a>             <span style="color:red">-&gt;</span> <span>WebSockets</span> <span>p</span> <span>a</span>
<a name="140c1122bae16b2a_140c0fa313e10101_line-253"></a><span>  catchWsError</span> <span>act</span> <span>c</span> <span style="color:red">=</span> <span>WebSockets</span> <span>$</span> <span style="color:blue">do</span>
<a name="140c1122bae16b2a_140c0fa313e10101_line-254"></a>      <span>env</span> <span style="color:red">&lt;-</span> <span>ask</span>
<a name="140c1122bae16b2a_140c0fa313e10101_line-255"></a>      <span style="color:blue">let</span> <span>it</span>  <span style="color:red">=</span> <span>peelWebSockets</span> <span>env</span> <span>$</span> <span>act</span>
<a name="140c1122bae16b2a_140c0fa313e10101_line-256"></a>          <span>cit</span> <span style="color:red">=</span> <span>peelWebSockets</span> <span>env</span> <span>.</span> <span>c</span>
<a name="140c1122bae16b2a_140c0fa313e10101_line-257"></a>      <span>lift</span> <span>$</span> <span>it</span> <span>`</span><span>E</span><span>.</span><span>catchError</span><span>`</span> <span>cit</span>
<a name="140c1122bae16b2a_140c0fa313e10101_line-258"></a>    <span style="color:blue">where</span>
<a name="140c1122bae16b2a_140c0fa313e10101_line-259"></a>      <span>peelWebSockets</span> <span>env</span> <span style="color:red">=</span> <span>flip</span> <span>runReaderT</span> <span>env</span> <span>.</span> <span>unWebSockets</span></pre>



<pre><br></pre><pre><font face="arial, helvetica, sans-serif">Look at `cit`. It runs the recovery function, then hands the underlying Iteratee the existing environment. That&#39;s fine if `act` is at fault, but there are Iteratee- and IO-ish things in WebSocketsEnv---if one of `envSink` or `envSendBuilder` is causing the exception, it&#39;ll just get re-thrown after `E.catchError`. (I think. That&#39;s the guesswork part.)</font></pre>

<pre style><font face="arial, helvetica, sans-serif">So check how `envSendBuilder` is built up, and see if there&#39;s a way it could throw an exception on client disconnect.</font></pre>
</div><div class="gmail_extra"><br><br><div class="gmail_quote">On Tue, Aug 27, 2013 at 10:28 AM, Yuras Shumovich <span dir="ltr">&lt;<a href="mailto:shumovichy@gmail.com" target="_blank">shumovichy@gmail.com</a>&gt;</span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hello,<br>
<br>
I&#39;m debugging an issue in &quot;websockets&quot; package,<br>
<a href="https://github.com/jaspervdj/websockets/issues/42" target="_blank">https://github.com/jaspervdj/websockets/issues/42</a><br>
<br>
I&#39;m not familiar with &quot;enumerator&quot; package (websockets are based on it),<br>
so I&#39;m looking for help. The exception is throws inside &quot;enumSocket&quot;<br>
enumerator using<br>
&quot;throwError&quot; ( <a href="http://hackage.haskell.org/packages/archive/network-enumerator/0.1.5/doc/html/src/Network-Socket-Enumerator.html#enumSocket" target="_blank">http://hackage.haskell.org/packages/archive/network-enumerator/0.1.5/doc/html/src/Network-Socket-Enumerator.html#enumSocket</a> ), but I can&#39;t catch it with &quot;catchError&quot;. It is propagated to &quot;run&quot; function:<br>


   &lt;interactive&gt;: recv: resource vanished (Connection reset by peer)<br>
<br>
The question is: how is it possible? could it be a bug in &quot;enumerator&quot;<br>
package?<br>
<br>
Thanks,<br>
Yuras<br>
<br>
<br>
_______________________________________________<br>
Haskell-Cafe mailing list<br>
<a href="mailto:Haskell-Cafe@haskell.org">Haskell-Cafe@haskell.org</a><br>
<a href="http://www.haskell.org/mailman/listinfo/haskell-cafe" target="_blank">http://www.haskell.org/mailman/listinfo/haskell-cafe</a><br>
</blockquote></div><br></div>