簡體   English   中英

如何檢測流套接字中的中止連接-PHP

[英]how detect aborted connections in stream sockets - php

我使用以下代碼接收數據並將數據發送回對等方:

$sock = stream_socket_server("tcp://127.0.0.1:9000", $errno, $errorMessage);
if (!$sock) {
    echo "error code: $errno \n error msg: $errorMessage";
}
$read[0] = $sock;
$write = null;
$except = null;
$ready = stream_select($read,$write,$except,10);
if ($ready) {
    $a = @stream_socket_accept($sock);

    $in = '';
    do {
        $temp = fread($a,1024);
        $in .= $temp;
    } while (strlen($temp));
    var_dump($in);

    $out = '....'//some data
    $out2 = '....'//some data
    fwrite($a,$out);
    fwrite($a,$out2);
}       

但是第二個fwrite給了我這個錯誤:

注意:fwrite():6個字節的發送失敗,錯誤碼為errno = 10053。主機中的軟件中止了已建立的連接。

現在如何在發送數據之前檢測到異常中斷的連接?

我有類似的東西,我的解決方案是將PHP警告轉換為異常並以這種方式處理。 特別:

set_error_handler("warning_handler", E_WARNING);    
try{
    $res = fwrite($a,$out);
} catch(Exception $e){
    //handle the exception, you can use $e->getCode(), $e->getMessage()
}   
restore_error_handler();    
....
function warning_handler($errno, $errstr) { 
    throw new Exception($errstr, $errno);   
}

恢復錯誤處理程序似乎最好,這樣就不會使其他地方的代碼混亂。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM