Too dumb for TCP

It seems I'm too dumb for handling raw TCP. Please, dear Internet, teach me what I'm doing wrong!

What I'm trying to do

I want to send some data to Telegraf via TCP. So I open a socket and send the data. All is well, until Telegraf is restarted, thus losing the connection to the sending script. So I want to catch the lost connection, reconnect, and send happily ever after...

The Problem

As soon as I stop Telegraf, the script justs exits, even though the call to send is packed in a lot of eval. So I guess I'm missing something obvious. Please point it out!

The Code

#!/usr/bin/env perl
use strict;
use warnings;

use IO::Socket::INET;

my $socket = IO::Socket::INET->new(
    PeerAddr => 'localhost',
    PeerPort => 8094,
    Proto    => 'tcp',
);

$|=1;
eval {
    while (1) {
        eval {
            $socket->send("test value=1i");
            print '.';
        };
        warn $@ if $@;
        sleep(1);
    }
};
warn $@ if $@;