質問: C言語のソケット通信について教えてください。 ・ブロッキングは以下の構成でも必要なのでしょうか? ・下記の構成で「ポート1の送受信処理」と「ポート2の送受信処理」が お互い通信中に影響を及ぼす可能性もあれば教えて下さい。 言語:C言語 winsock 環境:windows8 1クライアント側を作成しています。 2IPアドレスは1個。ポートは2個あります。 31個目のポートの役割は、クライアント側からデータ送信して、サーバの応答を待ち。 42個目のポートの役割は、クライアント側はデータを受信待ちし、サーバに応答を返す 53と4間で共有する資源はないものとする。
回答: ブロッキングは不可となることがあっても必要となる事はありません。 ノンブロッキングでも、ループで送受信が成功するまで待つことが出来ますので、ブロッキングが必須になることはないと思います。 むしろ、ごくごく単純な場合以外、途中で送受信を中断出来ないブロッキングモードでは困ることが多いです。 今回の場合もブロッキングモードでは、複数のプロセスかスレッドを使わないと、2つのポートの受信待ちを並行出来ません。 スレッドを使えば受信待ちを並行は出来ますが、通信が途絶するなどしたときは永遠に待ちつづけるため強制終了させる必要がでます。 簡単なものならエラー処理も無視や省略するなどの手抜きとともに、ループの必要のない手軽にブロッキングモードとして、いざという時は強制終了するとか運用でカバーすることもあるかもしれませんが、普通はタイムアウトなども出来るように、ノンブロッキングモードでループで受信待ちをすることが多いです。 [追記] Windowsの場合、かわりにイベントで処理する方法もある様です。