4

Perlのノンブロッキングソケットから読み取る方法を少なくとも3つ見つけました

$socket->recv
$socket->sysread
POSIX::read($socket,...

同じものに3つの異なる名前のように見えます、私はドキュメントを読みましたが、1つの大きな違いを見つけることができません。誰でも?

4

2 に答える 2

8

sysreadストリーム (TCP) 指向 (ある送信が終了して別の送信が開始される場所は気にしない) であり、recvデータグラム (UDP) 指向 (気にする) です。

POSIX::readファイル記述子でsysread動作しますが、ファイルハンドルで動作します。

于 2012-11-25T02:44:52.947 に答える
2

ドキュメントの最良の情報源は次のとおりrecv()ですman recvfrom-それは基本的にそのシステムコールへのperlインターフェースです。これrecv()は通常、非コネクション型(つまり、UDPソケット)に設定されたソケットで使用されますが、コネクション型(つまり、TCP)ソケットでも使用される場合があります。

との男の違いは次read()のとおりです。sysread()POSIX::read()

  • read(...)ファイルハンドルを取り、IOがバッファリングされます
  • sysread(...)ファイルハンドルを取り、IOはバッファリングされません
  • POSIX::read(...)ファイル記述子を取り、IOはバッファリングされません

ファイル記述子は、によって返される値(小さな整数)ですPOSIX::open()。また、fileno()関数を介してperlファイルハンドルのファイル記述子を取得できます。

于 2012-11-25T08:43:22.483 に答える