(close)perl new socket.

Phoenix


#!/usr/bin/perl

use IO::Socket;
#use IO::Handle;

$sock = IO::Socket::INET-> new(
PeerAddr => "127.0.0.1",
PeerPost => "25",
Proto => "tcp");
if(!$sock) {
die "can't create socket!\n";
}
$sock -> autoflush(1);

while (<$sock>) {
print "-> " ;
print;
}



пишет:

$ ./mpd4ctl
can't create socket!
$

что неправильно?
и где можно найти документацию, где будет написано, как себя функция ведёт, если не может создать сокет.
а то ничего нормального не нашёл.

sergey_m

Посмотри errno.

Barbie29

perldoc perlipc, в разделе интернет коммуникейшнз. Чесслово, лучше не напишешь, если надо написать, а не поучится...

Barbie29

и во вторых, ты уверен точно, что на PeerPost => "25", у тебя ничего не висит? обычно там smtp висит.

[ewww /root]# cat /etc/services |grep 25|grep tcp
smtp 25/tcp mail
prospero-np 1525/tcp # Prospero non-privileged
[ewww /root]#

для своих прог юзерских юзай порты больше 1024, все что меньше это системные порты как правило.

Phoenix

if(!$sock) {
print "errno= ".$errno."\n";
die "can't create socket!\n";
}
"mpd4ctl" 27L, 408C written
# ./mpd4ctl
errno=
can't create socket!

Чесслово, лучше не напишешь, если надо написать, а не поучится...

это про документацию или про мой первый пост?

Barbie29

if(!$sock) { 
die "can't create socket!\n";
}

но еслиб ты написал вот так вот:

if(!$sock) {
die "can't create socket: $!\n";
}

онаб тебе написала "can't create socket: Adress already in use" если 25-й заюзан.

Phoenix

АААААААа. спасибо.
peerport должно быть.
заработало.

Barbie29

это про документацию или про мой первый пост?
про документацию.

Phoenix

всем спасибо.
ок. буду знать.
и про $! спасибо.

sany79

Я бы ещё заменил PeerPost на PeerPort.
=====
Не заметил, что уже опоздал со своим замечанием. Проклятая невнимательность!
Оставить комментарий
Имя или ник:
Комментарий: