len = reader.read(buff, 0, buff.length);
//这里还需要判断是否读取到流的末尾,否则会进入死循环,通常返回-1表示流的结尾
//如果读取到结尾,表明是服务器主动关闭了连接,抛出这个异常,通知上层做资源清理工作
if(len==-1) {
logger.debug("Connection closed by server.."+socket);
raiseException(new TransferException("Connection closed by server. "+socket));
break;
}else {
bytesRecived(buff, 0, len);
}
}
} catch (IOException e) {
//当发生IO异常时可能是网络出现问题,也可能是用户关闭了连接,这里需要判断下
if(!userCloseFlag) {
logger.warn("Connection error.. "+socket);
raiseException(new TransferException(e));
}else {
logger.debug("Connection closed by user.."+socket);
}
}