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 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 ); # give t1 a moment to execute and to block in the recv call print "sleep 1s\n"; sleep(1); print "sleep done\n"; 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"; } }, $s); # problem: this is never printed, as threads->create never returns print "done\n"; $t1->join(); $t2->join(); #### C:\test>junk41 create t2 in t2 sleep 1s sleep done create t1 done in t1 >>> HTTP/1.1 302 Found Cache-Control: private Content-Type: text/h>>> tml; charset=UTF-8 Location: http://www.google.co.uk/?gfe_rd=cr>>> &ei=-lgnU7OuDdT88QPQ84CwAw Content-Length: 261 Date: Mon, 17 M>>> ar 2014 20:20:10 GMT Server: GFE/2.0 Alternate-Protocol: 80:qu>>> ic 302 Moved

3>>> 02 Moved

The document has moved here. >> Y> Terminating on signal SIGINT(2)