雖然php中對fsockopen()方法有連線socket的超時引數,但是沒有類似c中的連線成功後對資料的讀寫超時引數設定。沒關係,php中對stream提供了一系列的方法以防止超時
stream_set_blocking( $fp , false )//設定資料流為阻塞模式,以防止資料沒讀完就退出
如果模式為 false, 給定的 socket 描述符將切換到非塊模式, 如果為 true, 則切換到塊模式. 這個效果類似於 fgets() 從 socket 讀的情況. 在非塊模式 fgets() 將會立即返回,而在塊模式將等待資料滿足要求.
stream_set_timeout( $fp , 10 )//設定超時,應該在成功建立連線之後立即加上此句,後面的引數單位為秒
stream_get_meta_data( $fp )//從封裝協議檔案指標中取得報頭/元資料,返回的是乙個陣列,其中格式為
array (
[stream_type] => tcp_socket
[mode] => r+
[unread_bytes] => 0
[seekable] =>
[timed_out] =>
[blocked] => 1
[eof] =>
)其中索引timed_out為超時資訊,超時則為true,未超時則為false,我們可以籍由此來判斷socket是否超時,需要注意的是此句應該加在每次需要等待的語句之後,比如fwrite(),fread(),並且每讀一次,都要判斷一次是否超時,而對於乙個連線只需一次超時設定stream_set_timeout( $fp , 10 )就可以了
**:$fp = @fsockopen( $ip , $port, $errno , $errstr, 30 );
if( !$fp )
else
//讀取資料
$buf = fread( $fp , 16 ) ;
$status = stream_get_meta_data( $fp ) ;
//讀取資料超時
if( $status['timed_out'] )
}
PHP中Socket連線及讀寫資料超時問題分析
雖然php中對fsockopen 方法有連線socket的超時引數,但是沒有類似c中的連線成功後對資料的讀寫超時引數設定。沒關係,php中對stream提供了一系列的方法以防止超時 stream set blocking fp false 設定資料流為阻塞模式,以防止資料沒讀完就退出 如果模式為 f...
Socket 連線錯誤及原因
econnaborted 該錯誤被描述為 software caused connection abort 即 軟體引起的連線中止 原因在於當服務和客戶程序在完成用於 tcp 連線的 三次握手 後,客戶 tcp 卻傳送了乙個 rst 復位 分節,在服務程序看來,就在該連線已由 tcp 排隊,等著服務...
php中關於socket函式無法使用問題
被這個簡單的問題卡了兩個小時,不得不吐槽一下。網上的許多說明還是沒有到位。我用的是wamp整合環境,在搞定server端和client端的 後在命令列中輸入php d wamp www socket server.php執行 顯示 致命錯誤 呼叫未定義函式socket create 在第七行 為此我...