ネットワークプログラミング相談室 Port26
■ このスレッドは過去ログ倉庫に格納されています
0264デフォルトの名無しさん
2010/05/11(火) 17:43:34262です。
CheckFunc内で相手のIPやホスト名を見て、許可したりしなかったりとやりたいのですが、
ホスト名をとるためのgethostbyaddrは時間がかかることがありますよね。
なので名前解決中に次の人のチェックへ移行しようと、1人目にはCF_DEFERを返しました。
と同時に、スレッドで逆引きを開始します。
しかし、次のWSAAcceptでは、先ほどCF_DEFERを返したはずの接続要求をまた取得してしまいました。
2つ目の接続要求が来ている状態にも関わらずです。
・プログラムは、>>256のものを改造。CheckFuncの中で「接続要求元IP」をprintfし、return CF_REJECT を CF_DEFERにしただけです。
・2か所のクライアントから、同時に1つずつconnectされている状況
・どれだけ待っていても、片方のIPのみが延々とprintfされます
・CF_REJECTを返すように書き変えた場合は、きちんとWSAAcceptが2つの要求を交互に取得します。(もちろん3回ずつ)
現状資料をひっくり返していますが、どうも「後回しにする」方法が見つかりません。
やはり妥協して「一旦は接続を受け入れ、その後身元調査。許可されたら送受信を行う。許可できない身元だったらclosesocketする」
という形にしたほうが良いのでしょうか。
元々が「接続させたくないIP or ホスト名からの接続要求をはじいて、そのクライアントのconnect自体を失敗させたい」から始めた調査なのですが…。
■ このスレッドは過去ログ倉庫に格納されています