前提・実現したいこと
CASyncSocketでデバイスとやり取りをするために、サンプルコードに倣って接続を行う関数を作成しました。
ですがCASyncSocket::Connect
関数の返り値は0(==FALSE)でWSAGetLastError
でエラーコードを取得すると10035
が得られました。
この動作自体は当然らしいのですが、すでにあるサンプルコードではConnect
の返り値が1です。
サンプルコード通りに接続を完了させるために何が不足なのか分かりません。
なおサンプルは諸事情で貼り付けられません。
具体性を欠く質問になってしまい申しわけありませんがお知恵を貸していただければ幸いです。
よろしくお願いいたします。
(追記依頼を受けて、出来るだけ追記)
ちなみに、サンプルではCASyncSocketを継承したクラスで接続を行っています。
といってもConnectなどのオーバーライドはせずOnConnectなどのイベント時の動作のみオーバーライドしています。
よって、該当のソースコードではCASyncSocketの関数が直接呼ばれています。
該当のソースコード
c++
1void CSerialDlg::OnButton1(){ 2 int nRet; 3 CAsyncSocket sc; 4 // シリアル通信 5 // なぜかうまくいくコード 6 //nRet = sc.Create(); 7 //nRet = sc.AsyncSelect(FD_READ | FD_WRITE | FD_OOB | FD_ACCEPT | FD_CONNECT | FD_CLOSE); 8 //nRet = sc.Connect(_T("192.168.1.10"), 9000); // やってる事は同じはずなのにCAsyncSocketクラスそのままだとnRet==0になる 9 //if( nRet){ 10 // return; 11 //} 12 //else { 13 // int hoge = WSAGetLastError(); // hoge == 10035となる。 14 15 // return; 16 //} 17 18 // 同じことしているはずなのに失敗するコード 19 if( !sc.Create()) return; 20 if( !sc.AsyncSelect(FD_READ | FD_WRITE | FD_OOB | FD_ACCEPT | FD_CONNECT | FD_CLOSE)) return; 21 if( !sc.Connect(_T("192.168.1.10"), 9000){ // やってる事は同じはずなのにCAsyncSocketクラスそのままだとnRet==0になる 22 int hoge = WSAGetLastError(); // hoge == 10035となる。 23 return; 24 } 25 26}
試したこと
サンプルのほうに自作のソリューションで発生しているのと同様の現象を発生させようと目に付いた見慣れないマクロをコメントアウトしたりしましたが、接続が成功します。
ソリューションのプロパティから追加のライブラリディレクトリや追加のインクルードファイルを確認しましたが特に追加されているものはありませんでした。
補足情報(FW/ツールのバージョンなど)
- VisualStudio2015SP
- Windows7/64bit SP1
- c++/MFC
回答1件
あなたの回答
tips
プレビュー