3

したがって、私はこのツールを作成しており、これらのソケット(これらではありません) を使用しています。それらとの違いは、2 番目のソケットは厳密にストリームベースのソケットを使用していると推測します。問題は、私が使用しているソケットでsocket_get_statusを使用できないことです。

socket_get_status以外に利用可能なバイト数を取得する方法はありますか?

4

1 に答える 1

1

から返されるストリームはfsockopen()、通常のソケットのマネージド ラッパーです。未読バイト(おそらくあなたが求めているもの)はread()、ソケット上(ラッパー自体によって作成されたもの)とfread()ラッパー上(スクリプトによって作成されたもの)の違いです。

ラッパーは 8192 バイトのチャンクで読み取りますが、fread()orは一度にすべてのデータを読み取れない可能性があります。これが、クエリできるメタ データ フィールドがfgets()ある理由です。unreadそれが役に立つかどうかは別のことです;-)

通常のソケットを使用する場合は、次のいずれかを実行できます。

  • socket_select()データが利用可能になるのを待つために使用し、その後に適切な大きさのsocket_read()
  • socket_set_nonblock()ソケットのブロックを解除し、そこからの読み取りを試みるために使用します
于 2012-06-22T03:36:28.470 に答える