I have the following code that I believe should function as an echo server.
#!/usr/bin/env perl
use strict ; use warnings ;
use AnyEvent ; use AnyEvent::Handle ; use AnyEvent::Socket ;
my $main = AnyEvent->condvar();
tcp_server undef, undef, sub {
my ($fh, $host, $port) = @_;
my $handle; $handle = AnyEvent::Handle->new(
fh => $fh,
on_error => sub {
my ($hdl, $fatal, $msg) = @_;
AE::log error => $msg;
$hdl->destroy();
},
on_eof => sub {
my ($hdl) = @_;
$hdl->destroy();
},
on_read => sub {
my ($hdl) = @_;
$hdl->push_read(line => sub {
my ($hdl, $line) = @_;
if ($line =~ m/quit/i) {
$hdl->push_write("goodbye\n");
$hdl->destroy();
}
$hdl->push_write($line);
});
}
);
$handle->push_write("Hello $host:$port\n");
}, sub {
my ($fh, $thishost, $thisport) = @_;
print STDERR "$thishost:$thisport\n";
};
$main->recv();
However, when I netcat into the server. I see the greeting and the server immediately closes the connection. I'm probably missing something simple, but not sure what.
Thanks!
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link or
or How to display code and escape characters
are good places to start.