IO::Socket::INET - AF_INET 領域套接字的物件介面
use IO::Socket::INET;
IO::Socket::INET
提供一個物件介面,用於建立和使用 AF_INET 領域中的套接字。它是建立在 IO::Socket 介面上,並繼承 IO::Socket 定義的所有方法。
建立一個 IO::Socket::INET
物件,它是對新建立符號的參照(請參閱 Symbol 套件)。new
可選擇接受參數,這些參數以鍵值對的形式呈現。
除了 IO::Socket 接受的鍵值對之外,IO::Socket::INET
提供下列功能。
PeerAddr Remote host address <hostname>[:<port>]
PeerHost Synonym for PeerAddr
PeerPort Remote port or service <service>[(<no>)] | <no>
LocalAddr Local host bind address hostname[:port]
LocalHost Synonym for LocalAddr
LocalPort Local host bind port <service>[(<no>)] | <no>
Proto Protocol name (or number) "tcp" | "udp" | ...
Type Socket type SOCK_STREAM | SOCK_DGRAM | ...
Listen Queue size for listen
ReuseAddr Set SO_REUSEADDR before binding
Reuse Set SO_REUSEADDR before binding (deprecated,
prefer ReuseAddr)
ReusePort Set SO_REUSEPORT before binding
Broadcast Set SO_BROADCAST before binding
Timeout Timeout value for various operations
MultiHomed Try all addresses for multi-homed hosts
Blocking Determine if connection will be blocking mode
如果定義了 Listen
,則會建立一個監聽套接字,否則,如果套接字類型(由協定衍生而來)是 SOCK_STREAM,則會呼叫 connect()。如果給定了 Listen
參數,但為 false,則佇列大小將設定為 5。
儘管並非非法,但在非封鎖模式的套接字上使用 MultiHomed
幾乎沒有用處。這是因為第一次連線永遠不會因逾時而失敗,因為連線呼叫不會封鎖。
PeerAddr
可以是主機名稱或「xx.xx.xx.xx」格式的 IP 位址。PeerPort
可以是數字或符號服務名稱。服務名稱後面可以接一個數字,括在括號中,如果系統不知道該服務,則會使用該數字。PeerPort
規格也可以嵌入在 PeerAddr
中,方法是在其前面加上「:」。
如果沒有給定 Proto
,而你指定了一個符號 PeerPort
埠,則建構函式會嘗試從服務名稱衍生 Proto
。最後,假設 Proto
為「tcp」。如果沒有指定 Type
參數,則會從 Proto
推論。
如果建構函式只傳入一個單一參數,則假設為 PeerAddr
規格。
如果 Blocking
設為 0,則連線將為非封鎖模式。如果未指定,則預設為 1(封鎖模式)。
範例
$sock = IO::Socket::INET->new(PeerAddr => 'www.perl.org',
PeerPort => 'http(80)',
Proto => 'tcp');
$sock = IO::Socket::INET->new(PeerAddr => 'localhost:smtp(25)');
$sock = IO::Socket::INET->new(Listen => 5,
LocalAddr => 'localhost',
LocalPort => 9000,
Proto => 'tcp');
$sock = IO::Socket::INET->new('127.0.0.1:25');
$sock = IO::Socket::INET->new(
PeerPort => 9999,
PeerAddr => inet_ntoa(INADDR_BROADCAST),
Proto => 'udp',
LocalAddr => 'localhost',
Broadcast => 1 )
or die "Can't bind : $IO::Socket::errstr\n";
如果建構函式失敗,它將傳回 undef
,並將 $IO::Socket::errstr
套件變數設為包含錯誤訊息。
$sock = IO::Socket::INET->new(...)
or die "Cannot create socket - $IO::Socket::errstr\n";
由於傳統原因,錯誤訊息也設為全域 $@
變數,你仍可能會找到舊程式碼,它會在此處尋找錯誤訊息。
$sock = IO::Socket::INET->new(...)
or die "Cannot create socket - $@\n";
傳回 socket 的 sockaddr 結構的位址部分
傳回 socket 在本機上使用的埠號
傳回 socket 的 sockaddr 結構的位址部分,格式為文字 xx.xx.xx.xx
傳回 socket 在對端主機上的 sockaddr 結構的位址部分
傳回 socket 在對端主機上的埠號。
傳回 socket 在對端主機上的 sockaddr 結構的位址部分,格式為文字 xx.xx.xx.xx
Graham Barr。目前由 Perl Porters 維護。請於 https://github.com/Perl/perl5/issues 回報所有錯誤。
版權所有 (c) 1996-8 Graham Barr <gbarr@pobox.com>。保留所有權利。此程式為自由軟體;你可以根據 Perl 本身的條款重新散布或修改它。