在專案中使用到了curl擴展進行PUT傳遞資料到另一個介面,但是看到的現象是有時候偶發資料是空的 .
這個時候就使用了tcpdump命令來查看連接情況
具體命令是下面 , 另一個介面的埠號是8025 :
tcpdump -i any port 8025 -l -s 0
可以看到在我請求對方時出現下面這個TCP標志位 , R RST是中斷連接
Flags [R], seq 1525906647, win 0, length 0
這就說明是我這邊的問題, 我這邊中斷了連接
排查代碼看到了有設定超時時間
public function setTimeout($timeout) { if (is_null($timeout)) { return; } $t = intval($timeout); if ($t >= 0 && $t < ini_get('default_socket_timeout')) { $this->timeout = $t; } }
最終設定的是curl擴展的配置超時時間項
if ($this->timeout > 0) { $opts[CURLOPT_TIMEOUT] = $this->timeout; }
當我設定的超時時間超過php.ini中 default_socket_timeout 60秒時 , 就使用這個類里面的默認的超時時間 , 而類里面寫的是2秒
因此引發了上面連接中斷的問題.
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/172521.html
標籤:PHP
