これを処理する 1 つの方法は、Unix ベースのプラットフォームを使用している場合、シグナルを使用することです (Windows では利用できないと思います)。
まず、PHP ビルドに pcntl_* 関数が含まれていることを確認する必要があります。ここのドキュメントを参照してください:
http://php.net/manual/en/book.pcntl.php 多くのインストールでは、デフォルトではコンパイルされていません。
次のようにします。
if( !function_exists( "pcntl_signal" ) ) {
die("pcntl_* functions not available");
}
pcntl_signal( 14, "cleanup", TRUE ); // 14 is the value for the SIGALARM unix signal
pcntl_alarm( XXXX ); // where XXXX is the number of second timeout for doing maintenance
function cleanup()
{
// do your checks for timed out sockets here.
// you will need some way to access the data, possibly a global variable pointing to
// to the list of socket connections.
}