Как я могу указать, какой порт использовать в Perl's IO :: Socket :: INET?
Вопрос
я использую IO :: Socket :: Inet создать межпроцессную связь в моей программе. Мне нужно использовать определенный номер порта в моем клиенте TCP. Я следовал примеру в Perl DOC, но это не работает. Вот мой код:
Старый код (работает):
tx_socket = new IO::Socket::INET->new('127.0.0.1:8001') || die "Can't connect to 127.0.0.1:8001 : $!\n";
Новый код (не работает):
tx_socket = new IO::Socket::INET->new('127.0.0.1:8001', LocalPort=>9000 ) || die "Can't connect to 127.0.0.1:8001 : $!\n";
Кто-нибудь знает, что не так?
Решение
Ответ Grant Mclean работает, если вы исправите пропущенную запятую, но «работает» здесь может быть относительно того, что вы ожидаете.
use IO::Socket::INET;
$sock = IO::Socket::INET->new(
PeerAddr => '127.0.0.1',
PeerPort => 8001,
LocalPort => 9000,
Proto => 'tcp'
);
die("No socket!\n") unless $sock;
print "Socket good!\n";
Запуск этой урожайности:
No socket!
Что это не потому, что код не работает, он работает как ожидалось (в моем случае). То есть ожидается, что подключение к порту 8001 localhost не удастся с ними не слушать на другой стороне. Это иллюстрирует полезность отчетности об ошибке:
use IO::Socket::INET;
$sock = IO::Socket::INET->new(
PeerAddr => '127.0.0.1',
PeerPort => 8001,
LocalPort => 9000,
Proto => 'tcp'
) or die("$!\n");
die("No socket!\n") unless $sock;
print "Socket good!\n";
Который работает сейчас:
Connection refused
Если я запуску Netcat, прослушивающую по порту 8001, я получаю другой результат:
Socket good!
Другие советы
Согласно с Документация, вы должны делать что-то вроде:
$sock = IO::Socket::INET->new(
PeerAddr => '127.0.0.1',
PeerPort => 8001,
LocalPort => 9000,
Proto => 'tcp'
) or die "Connect error: $!";