Perl-getsockopt

提供:Dev Guides
移動先:案内検索

Perl getsockopt関数

説明

この関数は、オプションOPTNAMEのソケット実装レベルLEVELでSOCKETに設定されたソケットオプションを取得します。 ソケットレベルでのOPTNAMEのサンプル値の一部を以下の表に示します-

OPTNAME     Result
SO_DEBUG    Get status of recording of debugging information
SO_REUSEADDR    Get status of local address reuse
SO_KEEPALIVE    Get status of keep connections alive
SO_DONTROUTE    Get status of routing bypass for outgoing messages
SO_LINGER   Get status of linger on close if data is present
SO_BROADCAST    Get status of permission to transmit broadcast messages
SO_OOBINLINE    Get status of out-of-band data in band
SO_SNDBUF   Get buffer size for output
SO_RCVBUF   Get buffer size for input
SO_TYPE     Get the type of the socket
SO_ERROR    Get and clear error on the socket
TCP_NODELAY     To disable the Nagle buffering algorithm.

パックされた文字列の正確な内容は、LEVELおよびOPTNAMEによって異なります。詳細については、システムのドキュメントを参照してください。

構文

以下は、この関数の簡単な構文です-

getsockopt SOCKET, LEVEL, OPTNAME

戻り値

この関数はエラー時にundefを返し、そうでない場合はスカラーコンテキストのオプション値を返します。

以下は、基本的な使用法を示すサンプルコードです。これは、ソケットでNagleのアルゴリズムがオンになっているかどうかを確認します。 しかし、ここでは、この例では靴下IDを提供するために1つのソケットを開く必要があります-

#!/usr/bin/perl

use Socket qw(:all);

defined(my $tcp = getprotobyname("tcp"))
   or die "Could not determine the protocol number for tcp";
# my $tcp = IPPROTO_TCP; # Alternative

my $packed = getsockopt($socket, $tcp, TCP_NODELAY)
   or die "Could not query TCP_NODELAY socket option: $!";
my $nodelay = unpack("I", $packed);

print "Nagle's algorithm is turned ", $nodelay ? "off\n" : "on\n";