6

次のパケットの長さ、またはバッファ内のすべてのデータの長さのうち、どちらioctlが返されますか?FIONREAD

UDPクライアント 1 から 2 つのパケットを受信し、クライアント 1 のパケットの後にクライアント 2 から別の 2 つのパケットを受信するサーバーがあるとします。ioctlでは、 ofの値は何ですか? その場合FIONREAD、何をreadfrom返しますか?

クライアント 1 : v 2 つのパケット

++UDP サーバーが 4 つのパケットを取得しました <- FIONREAD?

クライアント 2 : ^ 2 つのパケット

FIONREAD? (サーバ)

  1. クライアント 1 の最初のパケットの長さ
  2. クライアント 1 の 2 つのパケットの長さ
  3. クライアント 1 の 2 つのパケット + クライアント 2 の 2 つのパケットの長さ
  4. クライアント 1 の最初のパケット + クライアント 2 の最初のパケットの長さ
  5. 他の
4

2 に答える 2

5

man udp (7)は次のように述べています。

   FIONREAD (SIOCINQ)
          Gets a pointer to an integer as argument.  Returns the  size  of
          the  next pending datagram in the integer in bytes, or 0 when no
          datagram is pending.  Warning: Using FIONREAD, it is  impossible
          to  distinguish  the  case where no datagram is pending from the
          case where the next pending  datagram  contains  zero  bytes  of
          data.   It  is  safer  to use select(2), poll(2), or epoll(7) to
          distinguish these cases.

したがって、あなたの質問に対する答えは次のとおりです。 FIONREAD は、次の (最初の) 保留中のデータグラムのサイズを返します

于 2013-08-21T06:17:00.313 に答える