PHP でサーバーからクライアントへデータを通知するのにソケット通信を行う場合、クライアント側のアプリが接続可能状態でないとソケットの接続が長い時間戻って来なくなります。それを回避するには、socket_set_option でタイムアウト時間を設定します。
<?php $address = "192.168.1.xxx"; // 送信先のIPアドレス $port = xxxx; // 送信先のポート $msg = "送信するメッセージです。"; $res = ""; $start = time(); // TCP/IP ソケット作成 $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); if ($socket === false) { $res = "socket_create() 失敗: ".socket_strerror(socket_last_error()).PHP_EOL; } else { // 送信タイムアウト時間の設定(10秒) $timeout = array('sec' => 10, 'usec' => 0); socket_set_option($socket, SOL_SOCKET, SO_SNDTIMEO, $timeout); // ソケット接続 $result = socket_connect($socket, $address, $port); if ($result === false) { $res = "socket_connect() 失敗: ".socket_strerror(socket_last_error($socket)).PHP_EOL; } else { $result = socket_write($socket, $msg, strlen($msg)); if ($result === false) { $res = "socket_write() 失敗: ".socket_strerror(socket_last_error($socket)).PHP_EOL; } else { $res = "送信しました。".PHP_EOL; } } // ソケットを閉じる socket_close($socket); } $end = time(); echo $res; echo ($end - $start)." 秒".PHP_EOL; ?>