http download/select timeout
我的代码是从server通过http download image。 现在的问题如果同时有ftp download flow时,会出现一个问题(出现的几率为50%):
Modem(client) 不断的给server发某个pkt没有收到,通过check ACK值发现一直是等待同一个数据包的到来,server也不断的重发这个包,但是Modem好象就是没有收到,不断的发重发请求,知道select timeout后,client(Modem)主动向server发送了一个FIN终止了TCP连接,于是download失败。
我尝试着在出现select timeout的地方加了重试,而且当第一次timeout时我手动的挺调ftp flow,看是否能恢复,可是仍旧失败,也就是说,这时候停掉ftp flow仍旧会在第二次尝试select时报错。
我的select语句附下:
memset(&tv, 0, sizeof(tv));
rv = select(sock+1, &rset, NULL, NULL, &tv);
for( ; ((retry < HTTP_IO_RETRY) && (rv <=0)); retry++){
tv.tv_sec = timeout;
do {
rset = *rset_orig;
rv = select(sock+1, &rset, NULL, NULL, &tv);
/* we assume tv contains remaining time when EINTR happens */
} while (rv < 0 && errno == EINTR);
if(rv < 0) break; //if error occurs do not retry.
else if(rv == 0){
TRACE_INFO("loc_wait_for_data: select timeout! retry ... (rv = %d , retry = %d)",rv,retry);
continue;
}
}
请教高手指点。 高分结贴