2012-03-21 74 views
2

我在寫一個使用Winsock的TCP服務器應用程序。連接到我的客戶端(我沒有源,因此無法進行更改)的行爲如下:如果它連接並關閉連接(因爲它是一個不需要的客戶端),它將立即重新連接。因此,如果有一個客戶想要連接到我但我不想與之通話的客戶(即我所謂的不受歡迎的客戶),我會瘋狂地轉動我的accept()電話, 。從兩個IP地址接收TCP連接

我想找到一種方法來防止瘋狂旋轉我的accept()調用。如果只有一個期望的客戶端,我可以將偵聽套接字綁定到該客戶端的IP地址,而不是INADDR_ANY。但是,唉,有超過1個想要的客戶。據我所知,當設置的大小大於1時,沒有辦法允許只連接一組所需的IP地址。

我已經看過WSAAccept。不幸的是,看起來這隻會將瘋狂轉變爲回調。

有沒有辦法拒絕不涉及accept()喚醒和返回(並因此導致所有這些瘋狂旋轉)的嘗試連接?

+1

你可以用防火牆阻止或過濾該端口上的傳入連接嗎? – 2012-03-21 20:58:28

回答

2

我相信你的問題已經在過去的stackoverflow問。也許看着這兩個線程可以幫助你解決問題:

如果你害怕遇到DoS攻擊或對性能問題,接受是在OSI stack的級別4上執行的,這是處理SYN-A的相對較低的級別CK與客戶的關係,因此在accept()不會導致重要的性能問題後,來自外部的基本連接立即丟失。

但是,如果您想絕對接受兩個IP地址,我認爲您可能必須使用防火牆或RAW套接字直接從TCP數據包中檢索IP地址並自行接受連接,但這樣做,我認爲,時間的巨大損失。