OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

Connectエラーが出てしまう・・・。

  • すぐに回答を!
  • 質問No.159828
  • 閲覧数659
  • ありがとう数6
  • 気になる数0
  • 回答数5
  • コメント数0

お礼率 35% (12/34)

VC++でストリーム型のネットワークアプリケーションを作成しています。
サーバソケット、クライアントソケットを作成し、Connectしようとしているのですが、WSAEWOULDBLOCKエラーが出てきてしまいます。
いったい何が原因なのでしょう・・・。
調べているのですが手がかりがつかめません。
なにか心あたりのある方、教えてください。
よろしくお願いします。
通報する
  • 回答数5
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.5
レベル13

ベストアンサー率 39% (632/1595)

>OnAccept()はすぐ帰ってくるのですが、、、

んー。サーバー側の動きですが
Listen() -> OnAccept() -> Accept() となりますが
Accept()する時 new した新しい CAsyncSocket に割り当ててますよね? Listenするソケットと実際に通信するソケットは異なるのが普通です。

情報が少ないので、ちょっとよく分かりません。
補足コメント
dole

お礼率 35% (12/34)

ありがとうございます。

>Listenするソケットと実際に通信するソケットは異なるのが普通です。
ここに気付いていませんでした・・。

うまく状況を説明できて居らず、スイマセン。
STREAM型(TCP/IP接続で)のネットワークアプリケーションを作りたいのです。
もう一度、教えていただいた方法で試してみます。
投稿日時 - 2001-10-30 23:36:39
お礼コメント
dole

お礼率 35% (12/34)

いろいろご教授ありがとうございました。
接続できるようになりました・・・。

しかし、相手が受信したことを確認できるアプリケーションにはまだ遠いようです。
STREAM型を使えばできると思っていたのですが・・・。
何かほかにご存知でしたら知らせてください。

本当にどうもありがとうございました。
投稿日時 - 2001-10-31 15:14:58
-PR-
-PR-

その他の回答 (全4件)

  • 回答No.1
レベル10

ベストアンサー率 31% (47/149)

非ブロッキングモードとブロッキングモードのどちらでソケット処理を しているのでしょうか? 非ブロッキングモードでソケットを生成している場合、 必ずこの値が戻るようです。 非ブロッキングモードの場合は、接続完了イベントがコールバックされた以降に 送受信処理をすればできると思います。 ブロッキングモードは特定の理由がない限り、処理がとまってしまうので 使用しないほうがいいかと思います ...続きを読む
非ブロッキングモードとブロッキングモードのどちらでソケット処理を
しているのでしょうか?

非ブロッキングモードでソケットを生成している場合、
必ずこの値が戻るようです。

非ブロッキングモードの場合は、接続完了イベントがコールバックされた以降に
送受信処理をすればできると思います。

ブロッキングモードは特定の理由がない限り、処理がとまってしまうので
使用しないほうがいいかと思います。→これはうそかも。

ちなみに私が以前作成したときは、非ブロッキングモードで送受信処理を
おこないました。
補足コメント
dole

お礼率 35% (12/34)

すばやい解答ありがとうございます。
非ブロッキングモードでソケット処理を行っています。
すいません、接続完了イベントはOnConnectを使うのでしょうか???
知識が危ういもので。。。
接続が完了していなくてもサーバのAccept、クライアントのSendはエラーが起きていないのです。
ただ、サーバのReceiveで接続されていないというエラーが出てくるのです。
なにかご存知でしたら教えてください。
投稿日時 - 2001-10-30 11:11:19


  • 回答No.2
レベル13

ベストアンサー率 39% (632/1595)

MFCだったらおそらく CAsyncSocket で接続されているのだと思いますが、非ブロッキングソケットの場合は Connect を呼び出してもその時点では接続しない(接続するまで関数がブロックしない)のでこのWSAEWOULDBLOCKが返ってきます。 この場合WSAEWOULDBLOCKが返るのは正常な動作です。このエラーコードだけは無視すればいいです。そのうち接続結果が OnConnect( ...続きを読む
MFCだったらおそらく CAsyncSocket で接続されているのだと思いますが、非ブロッキングソケットの場合は Connect を呼び出してもその時点では接続しない(接続するまで関数がブロックしない)のでこのWSAEWOULDBLOCKが返ってきます。

この場合WSAEWOULDBLOCKが返るのは正常な動作です。このエラーコードだけは無視すればいいです。そのうち接続結果が OnConnect() に返ってきますのでそこで接続結果を判断しましょう。

昔悩んだ記憶があります。(^^;
補足コメント
dole

お礼率 35% (12/34)

ありがとうございます。
しかし、なかなかOnConnect()に帰ってこないのですよね。。
同じマシン上でも理論上は可能ですよね??
投稿日時 - 2001-10-30 18:42:02
  • 回答No.3
レベル10

ベストアンサー率 31% (47/149)

非ブロッキングモードなら、デフォルトで WSAEWOULDBLOCK が返ってきますので、エラーと判断することはないですよ。 正常動作です。 つまり、getLastErrorを実行しても、 WSAEWOULDBLOCK以外が返ってきた場合を エラーとしてあげて、 WSAEWOULDBLOCKが戻った場合は、以降の処理をして構いません。 ...続きを読む
非ブロッキングモードなら、デフォルトで
WSAEWOULDBLOCK
が返ってきますので、エラーと判断することはないですよ。
正常動作です。

つまり、getLastErrorを実行しても、
WSAEWOULDBLOCK以外が返ってきた場合を
エラーとしてあげて、
WSAEWOULDBLOCKが戻った場合は、以降の処理をして構いません。
お礼コメント
dole

お礼率 35% (12/34)

ありがとうございました。
繋がりました。。。
投稿日時 - 2001-10-31 15:37:01
  • 回答No.4
レベル13

ベストアンサー率 39% (632/1595)

>同じマシン上でも理論上は可能ですよね?? 理論上というか、全然問題ないです。 >しかし、なかなかOnConnect()に帰ってこないのですよね。。 ん?同じマシンですよね? 一瞬のうちにつながりませんか? なかなか返ってこないというのは、返ってくるけど遅いということですか? ...続きを読む
>同じマシン上でも理論上は可能ですよね??

理論上というか、全然問題ないです。

>しかし、なかなかOnConnect()に帰ってこないのですよね。。

ん?同じマシンですよね?
一瞬のうちにつながりませんか?
なかなか返ってこないというのは、返ってくるけど遅いということですか?
補足コメント
dole

お礼率 35% (12/34)

解答ありがとございます。
助かっています。
すぐ返ってこないというのは、何か致命的なエラーがあるのでしょうか・・・・。
OnAccept()はすぐ帰ってくるのですが、、、
流れとしては、現在クライアントがConnectしたら、サーバがOnAccept→Accept
、そこで動きは止まってしまいます。
もしかしたら非同期式になっていないのでしょうか・・・・。
なんだか不安なのですが。

スイマセン、ご面倒お掛けしています・・。
投稿日時 - 2001-10-30 21:18:02
お礼コメント
dole

お礼率 35% (12/34)

大変ありがとうございました。
エラーコード拾えました;;;;;;

すいません。
本当にお世話になりました。
投稿日時 - 2001-10-31 15:34:51
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ