sub checksocket { my ($sock) = @_; my $data; $sock->read($data, $nnn) # replace $nnn with number of bytes you want or return; # no data read # do something with $data here } my $mw = MainWindow->new; # set up your Tk widgets here my $sock = IO::Socket::INET->new(PeerAddr => 'host:port', Proto => 'tcp', Blocking => 0); # set non-blocking mode my $after = $mw->repeat(500, # set to appropriate number of milis sub { checksocket($sock) } ); MainLoop;