use strict;
use Test::More;
use Test::TCP;
BEGIN {
use_ok "ZMQ::LibZMQ2";
use_ok "ZMQ::Constants", qw(:v2.1.11 ZMQ_PUB ZMQ_SUB ZMQ_SUBSCRIBE ZMQ_POLLIN ZMQ_NOBLOCK);
}
test_tcp(
client => sub {
my $port = shift;
my $ctxt = zmq_init();
my $sock = zmq_socket($ctxt, ZMQ_SUB);
zmq_connect($sock, "tcp://127.0.0.1:$port" );
zmq_setsockopt($sock, ZMQ_SUBSCRIBE, "W");
my $message = zmq_recv($sock);
is zmq_msg_data($message), "WORLD?";
},
server => sub {
my $port = shift;
my $ctxt = zmq_init();
my $sock = zmq_socket($ctxt, ZMQ_PUB);
zmq_bind($sock, "tcp://127.0.0.1:$port" );
# if this server goes away before the client can recv(), the
# client waits hanging
local $SIG{ALRM} = sub {
die "ZMQ_ALRM_TIMEOUT";
};
eval {
alarm(10);
my @message = qw(HELLO? WORLD? HELLO? HELLO?);
while(1) {
my $message = shift @message;
if ($message) {
zmq_send($sock, $message);
}
sleep 1
}
};
}
);
done_testing;