<html>
<head>
<meta content="text/html; charset=ISO-8859-1"
http-equiv="Content-Type">
</head>
<body bgcolor="#FFFFFF" text="#000000">
On 06/24/2014 09:54 AM, Konstantin A. Pustovalov wrote:<br>
<blockquote cite="mid:53A9209D.6060809@gmail.com" type="cite">
<meta content="text/html; charset=ISO-8859-1"
http-equiv="Content-Type">
<div class="moz-cite-prefix">On 24.06.2014 00:47, Alexander
Karelas wrote:<br>
</div>
<blockquote cite="mid:53A89247.5080201@gmail.com" type="cite"><a
moz-do-not-send="true" class="moz-txt-link-freetext"
href="http://stackoverflow.com/questions/24373840/why-isnt-on-eof-called-in-this-anyeventhandle-example">http://stackoverflow.com/questions/24373840/why-isnt-on-eof-called-in-this-anyeventhandle-example</a>
<br>
<br>
I notice that when there is on on_read function, then on_eof
doesn't get called when the telnet client connects and
immediately disconnects. <br>
<br>
However when an $hdl->on_read(sub{ say "READ!" }); statement
is executed, then the on_eof event gets called even though the
on_read event never gets called. <br>
<br>
So why is on_read needed for on_eof, if it doesn't get executed?
Should this be in the documentation? Maybe this could be
classified as a bug? <br>
</blockquote>
<br>
You should read
<a moz-do-not-send="true" class="moz-txt-link-freetext"
href="http://search.cpan.org/%7Emlehmann/AnyEvent-7.07/lib/AnyEvent/Handle.pm#NONFREQUENTLY_ASKED_QUESTIONS">http://search.cpan.org/~mlehmann/AnyEvent-7.07/lib/AnyEvent/Handle.pm#NONFREQUENTLY_ASKED_QUESTIONS</a><br>
<br>
Also, manual says about read queue:<br>
<br>
> <span style="color: rgb(0, 0, 0); font-family: arial,
sans-serif; font-size: medium; font-style: normal; font-variant:
normal; font-weight: normal; letter-spacing: normal;
line-height: normal; orphans: auto; text-align: start;
text-indent: 0px; text-transform: none; white-space: normal;
widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;
background-color: rgb(255, 255, 255); display: inline
!important; float: none;">It can be used in two ways, the
"simple" way, using only<span class="Apple-converted-space"> </span></span><code
style="color: rgb(0, 0, 0); font-style: normal; font-variant:
normal; font-weight: normal; letter-spacing: normal;
line-height: normal; orphans: auto; text-align: start;
text-indent: 0px; text-transform: none; white-space: normal;
widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;
background-color: rgb(255, 255, 255);">on_read</code><span
style="color: rgb(0, 0, 0); font-family: arial, sans-serif;
font-size: medium; font-style: normal; font-variant: normal;
font-weight: normal; letter-spacing: normal; line-height:
normal; orphans: auto; text-align: start; text-indent: 0px;
text-transform: none; white-space: normal; widows: auto;
word-spacing: 0px; -webkit-text-stroke-width: 0px;
background-color: rgb(255, 255, 255); display: inline
!important; float: none;"><span class="Apple-converted-space"> </span>and
the "complex" way, using a queue.</span><br>
<br>
I think that when there is no on_read handler and read queue is
empty ( there is no outstanding push_read requests ) AE::Handle is
unable to decide whether to call on_eof or on_error. You should be
able to construct AE::handle with no on_read and empty queue. Then
make push_read( line => ) request and get on_error called.<br>
</blockquote>
<br>
<br>
Why is AE::Handle unable to decide? Why couldn't it just call on_eof
in that case?<br>
<br>
- Alex<br>
</body>
</html>