2012-11-01 44 views
4

C中的套接字是否提供任何方式來限制基於IP的傳入連接到套接字的數量?限制基於IP的傳入TCP連接

例如,要阻止一個客戶端IP發送垃圾郵件連接,是否有辦法限制IP可以連接到套接字的次數?

或者做這樣的事情必須定製?

+1

你爲什麼問?你在想什麼樣的服務器?我相信'連接'成本比'發送'更多。閱讀關於C10K問題http://en.wikipedia.org/wiki/C10k_problem –

+1

它在防火牆中更容易實現 - 例如Linux上的iptables。 – Julian

回答

1

我覺得你正在談論的真正意圖是節流,即對於特定的客戶端/連接,在給定的時間內只允許固定數量的數據包。這聽起來像是比允許/禁止更多連接更現實的使用場景。

大多數現代語言提供某種支持,如java或c#,但不是c。

但是,這是一個實現它的優雅方法。我自己已經在生產代碼中使用它。

implementing throttling

1

在插座中沒有這樣的東西。您需要自定義解決方案,並且考慮在防火牆中執行它會更好。

+0

好的謝謝,這就是我害怕的。 – Takkun

1

沒有什麼標準的插座API中的是,沒有。使用標準API,服務器代碼可以做的唯一事情是客戶端連接accept(),檢查其IP,然後根據需要關閉連接。

對於Microsoft的WinSock API,WSAAccept()函數確實有一個回調,在從服務器的隊列接受連接之前調用。回調函數可以決定接受連接,拒絕連接或將其保留在隊列中。