В модуле сокетов Perl (v5.10) по умолчанию (по некоторым причинам) параметры сокетов sndbuf и rcvbuf имеют очень низкие значения: 5 и 60 байт соответственно. Когда я пытаюсь увеличить до более высокого значения (скажем, 4K), это не займет.
use Socket;
# *** someother code ***
# Retrieve default values
my $snd_size = unpack("I", getsockopt(SOCK, $proto, SO_SNDBUF));
print "The default sndsize = $snd_size\n";
my $rcv_size = unpack("I", getsockopt(SOCK, $proto, SO_RCVBUF));
print "The default rcvsize = $rcv_size\n";
my $required_send_buf_size = 4096;
my $required_recv_buf_size = 4096;
my $pack_send = pack("I", $required_send_buf_size);
if (!setsockopt(SOCK, $proto, SO_SNDBUF, $pack_send))
{
print("ERROR: Unable to set the SO_SNDBUF to $required_send_buf_size\n");
close(SOCK);
return;
}
$snd_size = unpack("I", getsockopt(SOCK, $proto, SO_SNDBUF));
print "The modified sndsize = $snd_size\n";
my $pack_recv = pack("I", $required_recv_buf_size);
if (!setsockopt(SOCK, $proto, SO_RCVBUF, $pack_recv))
{
print("ERROR: Unable to set the SO_RCVBUF to $required_recv_buf_size\n");
close(SOCK);
return;
}
В приведенном выше коде оба вызова setsockopt () завершаются ошибкой.