getsockopt SOCKET,LEVEL,OPTNAME

查詢與 SOCKET 關聯且位於指定 LEVEL 的名為 OPTNAME 的選項。選項可能存在於多個通訊協定層級,視通訊端類型而定,但至少會存在最上層的通訊端層級 SOL_SOCKET(在 Socket 模組中定義)。若要查詢其他層級的選項,應提供控制該選項的適當通訊協定的通訊協定編號。例如,若要指出選項應由 TCP 通訊協定來詮釋,LEVEL 應設定為 TCP 的通訊協定編號,您可以使用 getprotobyname 來取得該編號。

此函式會傳回一個封裝的字串,代表所要求的通訊端選項,或在發生錯誤時傳回 undef,並將錯誤原因置於 $! 中。封裝字串中的內容取決於 LEVEL 和 OPTNAME;請參閱 getsockopt(2) 以取得詳細資料。常見的情況是選項為整數,這種情況下,結果會是封裝的整數,您可以使用 unpack 搭配 i(或 I)格式來解碼。

以下是測試 Nagle 演算法是否在 socket 上啟用的範例

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 "getsockopt TCP_NODELAY: $!";
my $nodelay = unpack("I", $packed);
print "Nagle's algorithm is turned ",
       $nodelay ? "off\n" : "on\n";

移植性問題:perlport 中的「getsockopt」