2

Winsockを使用してTCPサーバーアプリケーションを作成しています。私に接続するクライアント(ソースがないため変更できない)は、次のように動作します。接続して接続を閉じると(不要なクライアントであるため)、すぐに再接続します。この結果、私に接続したいが話したくないクライアント(つまり、私が望ましくないクライアントと呼んでいるもの)がそこにいる場合、accept()呼び出しに狂ったように回転します。 。

私は、accept()呼び出しでその狂気が回転するのを防ぐ方法を見つけたいと思います。必要なクライアントが1つしかない場合は、リスニングソケットをINADDR_ANYではなくそのクライアントのIPアドレスにバインドできます。しかし、残念ながら、希望するクライアントは1つ以上あります。私の知る限り、目的のIPアドレスのセットのサイズが1より大きい場合、そのセットからの接続のみを許可する方法はありません。

WSAAcceptを見てきました。残念ながら、これは単に狂った回転をコールバックにシフトするだけのようです。

accept()がウェイクアップして戻ることを伴わない(したがって、このすべての狂った回転につながる)接続の試行を拒否する方法はありますか?

4

1 に答える 1

2

あなたの質問は過去にstackoverflowについてすでに尋ねられていると思います。たぶん、これらの2つのスレッドを見ると、問題が解決するのに役立ちます。

Dos攻撃やパフォーマンスの問題が発生することを恐れている場合、acceptはOSIスタックのレベル4で動作します。これは、クライアントとのSYN-ACKネゴシエーションを処理する比較的低いレベルであるため、外部からの基本的な接続はすぐに実行されます。 accept()の後にドロップしても、重要なパフォーマンスの問題は発生しません。

ただし、絶対に2つのIPアドレスを受け入れたい場合は、ファイアウォールまたはRAWソケットを使用してTCPパケットから直接IPアドレスを取得し、自分で接続を受け入れる必要があると思いますが、これは、時間の大きな損失。

于 2012-03-21T21:05:53.273 に答える