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
参数,但为假,则队列大小将设置为 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";
返回套接字的 sockaddr 结构的地址部分
返回套接字在本地主机上使用的端口号
以文本形式 xx.xx.xx.xx 返回套接字的 sockaddr 结构的地址部分
返回对等主机上套接字的 sockaddr 结构的地址部分
返回对等主机上套接字的端口号。
以文本形式 xx.xx.xx.xx 返回对等主机上套接字的 sockaddr 结构的地址部分
Graham Barr。目前由 Perl 维护者维护。请在 https://github.com/Perl/perl5/issues 报告所有错误。
版权所有 (c) 1996-8 Graham Barr <[email protected]>。保留所有权利。本程序是自由软件;您可以在 Perl 本身的相同条款下重新发布和/或修改它。