use Tk; use threads; use IO::Socket::INET; use strict; $| ++; my $ss = IO::Socket::INET->new(Proto=>"tcp", LocalAddr=>"localhost", LocalPort=>3000, Listen=>10, Timeout=>60, Reuse=>1) || die "Failed to listen"; my $mw = MainWindow->new(); my $label = $mw->Label(-text => "0")->pack(); my $b = $mw->Button(-text => "Read ...", -command => \&callback)->pack(); threads->create(\&numbers); print "Start to listen ...\n"; my $s = $ss->accept(); print "Connection established\n"; $b->fileevent($s, "readable" => \&callback); MainLoop; sub numbers { sleep(5); print "Entered numbers()\n"; my $c = IO::Socket::INET->new(Proto=>"tcp", PeerAddr=>"localhost", PeerPort=>3000) || die "Failed to connect"; for my $i (1..10) { print "about to send $i\n"; print $c "$i\n"; sleep(1); } print "numbers() thread quiting ...\n"; } sub callback { print "callback triggered\n"; my $l = <$s>; chomp $l; print "After read\n"; print $l; $label->configure(-text => $l); }