ソケットからデータを読み取ろうとしています。なんらかの理由で理解できませんが、read 関数が無限ループに陥っているようです。それが起こると私が思う理由は、Eclipseを使用してデバッグしている間、デバッガーが読み取り機能を通過しないためです。また、端末でプログラムを実行すると、永久に実行されます。ヘルプ!!
追加情報: Linux で実行しており、この問題と関係があるかどうかはわかりませんが、プログラムでスレッドを作成します。
私が言及する必要があると思うもう1つのこと: read() が初めて呼び出されたとき、期待どおりに機能し、ソケット内のメッセージ全体を読み取ります。read() が 2 回目に呼び出されたとき (読み取るものが残っていないとき) に問題が発生します。read が関数を終了する 0 を返すと予想していましたが、代わりに read は無限ループに入ります。
すべてが起こっている場所は次のとおりです。
read_write_res block_read_reply(int fd, void* buf, int max, int* read_size) {
int flag = 1;
if (read_size != NULL)
*read_size = 0;
int i;
while (1) {
i = read(fd, buf, max); /* HERE is where the debbuger gets stuck */
if (i == 0 && flag == 1) //nothing to read
continue;
if (i == 0 && flag == 0)
return READ_WRITE_SUCCESS;
if (i < 0){
return READ_WRITE_FAILURE;
if (i > 0 && read_size != NULL)
*read_size += i;
}
flag = 0;
max -= i;
buf = (char*) (buf) + i;
}
return READ_WRITE_SUCCESS;
}