TCPでの非同期型select関数について
マッキントッシュOS-X上で動くTCP通信プログラムを作る場合について教えてください。
ウィンドウアプリを考えています。
ウィンドウ環境なので、アプリがフリーズしてしまわないために、
以下のような非同期処理が考えられます。
この場合、データが来ていなくても、while(1)がぐるぐる回るので
無駄にプロセスを食ってしまうと思うのですが、これはしかたのないことでしょうか。
もっとよい方法がるのでしょうか。
Winsockだとイベント応答関数での受信処理処理ができてエレガントなのですが、
バークレイソケットでは、どうすべきなのか疑問に思い質問させていただきました。
よろしくお願いします。
//ソケットを非同期モードにセット
val = 1;
ioctl(sock, FIONBIO, &val);
while (1) {
memcpy(&fds, &readfds, sizeof(fd_set));
select(2, &fds, NULL, NULL, NULL);
// sockに読み込み可能データが届いている場合は、受信
if (FD_ISSET(sock, &fds)) {
memset(buf, 0, sizeof(buf));
recv(sock, buf, sizeof(buf), 0);
}
else{
//受信データがなかったときの処理
}
}
お礼
ありがとうございます。selectの特徴を 活用したいい解答ですね^^助かりました。