Oui, c'est très sale. Mes ajouts sont en gras.

Dans la fonction _sock_info

if(@proto = getprotobyname($proto)) {
  $proto = $proto[2] || undef;
} elsif ($proto == 'tcp') {
  $proto = 6;
} else {
  $@ = "Bad protocol '$proto'";
  return;
}

Et

$proto = (getprotobyname($serv[3]))[2] || undef
    if @serv && !$proto;
$proto = 6 if (! $proto && $serv[3] == 'tcp');

Et dans la fonction configure...

$proto ||= (getprotobyname('tcp'))[2];
$proto ||= 6;

Mon préféré :-)

my $pname = (getprotobynumber($proto))[0];
$pname = 'tcp';
$type = $arg->{Type} || $socket_type{lc $pname};