非ブロッキングからブロッキングに戻すには?

解決


裏方  2005-08-22 05:44:28  No: 58702

WindowsでのWinsockプログラミングについて質問です。
 WSAAsyncSelectという関数を用いてソケットを非ブロッキングにしてConnect 関数を非同期で行っているのですが、その後の通信でブロッキングモードに戻す必要があり、その方法を探しています。

 他のサイトでWSAAsyncSelectの4番目の引数を0にしたらブロッキングモードに戻るというのを見て実践したのですが上手くいきません。
 また、WSAAsyncSelectで指定したソケット以外のソケットも非ブロッキングモードになってしまうのですがこれは仕様なのでしょうか?


YuO  2005-08-22 05:59:15  No: 58703

> 他のサイトでWSAAsyncSelectの4番目の引数を0にしたらブロッキングモードに戻るというのを見て実践したのですが上手くいきません。

何で,それを読んだあとちゃんとMSDNで確認しないのですか?
そこまでわかっていて,ちゃんとMSDN読めば,何が足りないのかすぐわかるはずですが。
http://msdn.microsoft.com/library/en-us/winsock/winsock/wsaasyncselect_2.asp
>To set socket s back to blocking mode, it is first necessary to clear the event record associated with socket s via a call to WSAAsyncSelect with lEvent set to zero.
>You can then call ioctlsocket or WSAIoctl to set the socket back to blocking mode.

> また、WSAAsyncSelectで指定したソケット以外のソケットも非ブロッキングモードになってしまうのですがこれは仕様なのでしょうか?
そのような仕様は存在しないはずです。
書いたコードに間違いがあるのではないでしょうか?


裏方  2005-08-23 04:05:34  No: 58704

お返事ありがとうございます。
WSAAsyncSelectの4番目と3番目の引数を0に設定した後、さらioctlsocket 
関数を用いなければ思ったようにブロッキングモードに戻らなかったみたいです。

今まではどちらか片方だけしか試していなかったので上手くいかなかったんだと思います。
未熟者ゆえMSDNの説明を読み落としてしまいました。
初歩的な部分で質問してしまい申し訳ございませんでした。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加