use strict; use warnings; use threads; use IO::Socket::INET; my $s = IO::Socket::INET->new(PeerAddr => 'www.google.com', PeerPort => 80, Proto => 'tcp') or die "error: $@"; print "create t1\n"; my $t1 = threads->create(sub { my ($r) = @_; my $data = ''; print "in t1\n"; while (1) { $r->recv($data, 64); #print ">>> $data\n"; } }, $s); # give t1 a moment to execute and to block in the recv call print "sleep 3s\n"; sleep(3); print "sleep done\n"; print "create t2\n"; my $t2 = threads->create(sub { # problem: this is never printed print "in t2\n"; $s->send("GET / HTTP/1.1\r\n\r\n"); }, 0); # problem: this is never printed, as threads->create never returns print "done\n"; $t1->join(); $t2->join();