2016-11-05 23 views
0

socket_listen()爲什麼socket_listen使用積壓()

我看到socket_listen() .Still的手動我不明白的

bool socket_listen (resource $socket [, int $backlog = 0 ]) 

1.什麼點在這種情況下,積壓?

2.And爲什麼使用socket_listen()以及它的用途是什麼?

3.什麼發生backlogssocket_listen()

除去
  • 爲什麼使用積壓值等0,1,2,3
  • 好心解釋上述問題。

    感謝

    回答

    3

    有什麼不對$backlog是如何覆蓋在documentation

    最大的積壓傳入連接將排隊等待處理。如果連接請求到達時隊列已滿,則客戶端可能會收到錯誤,並顯示ECONNREFUSED,或者如果底層協議支持重新傳輸,則可能會忽略請求,以便重試可能成功。

    注意: 傳遞給積壓參數的最大數量很大程度上取決於底層平臺。在Linux上,它被無聲地截斷爲SOMAXCONN。在win32上,如果通過SOMAXCONN,負責套接字的基礎服務提供者將把backlog設置爲最大合理值。沒有標準規定來找出這個平臺上的實際積壓值。

    或者你可以參考BSD Sockets listen documentation,因爲PHP使用BSD套接字:

    表示可以在任一週時間被排隊掛起連接的數量的整數。操作系統通常對此值設置上限。

    BSD套接字在歷史上使用單個隊列實現,其大小由backlog參數確定。

    當從客戶端收到一個SYN數據包時,它會發回一個SYN/ACK數據包並將連接添加到隊列中。當收到相應的ACK時,連接將其狀態更改爲ESTABLISHED,並有資格切換到應用程序。

    當達到最大待辦事項時,系統將不再發回SYN/ACK數據包以響應SYN數據包。通常,TCP實現將簡單地丟棄SYN數據包(而不是使用RST數據包進行響應),以便客戶端重試。因此說,「可能收到一個錯誤與ECONNREFUSED指示」

    如果你沒有在你的實現使用backlog的說法,它只會被自動設置。在Linux上它是,爲listen man page

    如果積壓參數比/proc/sys/net/core/somaxconn值越大,則靜靜地截斷該值;此文件中的默認值爲128.在2.4.25之前的內核中,此限制是一個硬編碼值,SOMAXCONN,值爲128.

    +0

    我不是說錯了這個PHP手冊。爲什麼使用像'0,1,2,3'這樣的積壓值有什麼用處呢? – prasanth

    +1

    我想我完全覆蓋了我的答案。您可以使用'backlog'來一次限制傳入連接的數量。這不明顯嗎? –