IRC クライアントの実装 (まだ)。私はほとんどすべてを持っていますが、今日、1つの大きな問題があることに気付きました.
サーバーが送信するすべてのデータを取得しますが、送信されたデータを表示した後に何もしないと、while(1)
ループは受信するデータが他にあるかどうかを一度だけチェックしてから停止します。入力したものを送信した後、ソケットで待機しているデータがあるかどうかを確認し、最終的にそれを表示するよりも、何かを入力して送信した場合にのみ再開します。
この状況では、何かを送信した場合にのみ、以前に受信したメッセージが表示されるため、これは明らかに間違っています。
これは私のコードです:
while(1){
if((readReady = readReadiness(sockfd))==0){ //nothing to recv
if(((writeReady = writeReadiness(sockfd))>0) && (readReady = readReadiness(sockfd))==0){ //sending is possible
(data sending part...)
}
else
continue; //if there s no data to read and cant send
}
else{ //if there s some data to recv() on the socket buffer
(parsing and receiving data part...)
}
continue;
}
readReadiness()
受信するデータがあるかどうか、または送信する可能性があるかどうかを確認するために使用しますwriteReadiness()
。select()
問題は、無限に何もしなくても受信するデータがあるかどうかを確認する無限ループを作成する方法です。? (while(1)
もう一度何かを送信するまでチェックを停止します)
を使用しようとしましたfork()
が、それを機能させてデータをプールする方法がわかりませんが、それでも送受信して表示する可能性があります。