[PHP]socket的連接超時 與 讀取/寫入超時


socket處理時有兩種超時 , 分為連接超時 和 讀取/寫入數據超時

1. stream_socket_client 函數中的超時時間是連接超時 , 默認是php.ini中的default_socket_timeout配置項

2. stream_set_timeout() 函數設置的是 讀取/寫入數據超時

3. default_socket_timeout配置項也控制file_get_contents的超時時間

 

PHP文檔中對該函數的解釋:

stream_socket_client ($remote_socket [,&$errno [,&$errstr [,$timeout = ini_get("default_socket_timeout") [,$flags = STREAM_CLIENT_CONNECT [ $context ]]]]] )


1.remote_socket 要連接到的套接字的地址。
  對於Internet域套接字(AF_INET)(如TCP和UDP),remote_socket參數的目標部分應包含主機名或IP地址,后跟冒號和端口號。對於Unix域套接字,目標部分應指向文件系統上的套接字文件。


注意:默認情況下,流將以阻塞模式打開。您可以使用stream_set_blocking($stream,1)將其切換到非阻塞模式。如果 mode 為0,資源流將會被轉換為非阻塞模式;如果是1,資源流將會被轉換為阻塞模式。 該參數的設置將會影響到像 fgets() 和 fread() 這樣的函數從資源流里讀取數據。 在非阻塞模式下,調用 fgets() 總是會立即返回;而在阻塞模式下,將會一直等到從資源流里面獲取到數據才能返回。

2.errno 如果連接失敗,將設置為系統級錯誤號。
3.errstr 如果連接失敗,將設置為系統級錯誤消息。
4.timeout connect()系統調用應該超時之前的秒數。 默認是php.ini中的default_socket_timeout配置項

注意:此參數僅在不進行異步連接嘗試時適用。
注意: 要設置通過套接字讀取/寫入數據的超時,請使用stream_set_timeout(),因為僅在連接套接字時才應用超時。

5.flags 位掩碼字段,可以設置為連接標志的任意組合。目前,連接標志的選擇僅限於STREAM_CLIENT_CONNECT(默認值),STREAM_CLIENT_ASYNC_CONNECT和STREAM_CLIENT_PERSISTENT。 
6.context 使用stream_context_create()創建的有效上下文資源。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM