役に立ちましたか?

解決

socket_read()から:

socket_read() returns the data as a string on success, or FALSE on error 
(including if the remote host has closed the connection). The error code can 
be retrieved with socket_last_error(). This code may be passed to 
socket_strerror() to get a textual representation of the error.

これは、ほとんどの言語でソケットが閉じているかどうかを検出するためのかなり標準的なアプローチです。 PHPが直接イベントスタイルの通知を提供するとは思わない(おそらくPEARの何かを除く)。

他のヒント

fread($ socket) は、待機せずに即座に空の文字列を返します。タイムアウトするソケット。

(いいえ、これは本当の答えではありませんが、これは私のコードATMにあるハックのような解決策です。この動作はウィンドウ固有のものかもしれません。)

これは質問に対する直接的な答えではありませんが、貴重なメモかもしれません。 複数の場所で socket_close($ socket); を呼び出し、すでにソケットを閉じているかどうかを確認したい場合は、次の比較を使用して行うことができます:

    if (get_resource_type($socket) === 'Unknown') {
        exit;
    }

var_dump($ socket);を閉じる前後にソケットをダンプすることで見つけました

  • タイプ(ソケット)の resource(5)を閉じる前に
  • タイプ(不明)の resource(5)を閉じた後

しかし、ソケットが反対側で閉じられているかどうかはわかりません。基本的に、接続が確立されると、常に2つのソケットがあります(各側に1つ)。したがって、 get_resource_type は自分のリソースのみをチェックし、反対側はチェックしません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top