Quantcast
Channel: 北風研究室
Viewing all articles
Browse latest Browse all 93

PHP socket_connect のタイムアウト

$
0
0

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;
?>

Viewing all articles
Browse latest Browse all 93

Trending Articles