- 论坛徽章:
- 2
|
本帖最后由 FILERF 于 2014-12-13 11:36 编辑
下载一个大容量文件,1.3G左右。下载20多分钟后就停止了,java客户端没有报错,查看storage.log发现如下问题:
[2014-12-12 10:30:10] ERROR - file: storage_nio.c, line: 404, client ip: 192.168.25.150, recv failed, errno: 32, error info: Broken pipe
下载代码: public int download_file_mydown(String group_name, String remote_filename,
OutputStream out) throws IOException, MyException
{
final long file_offset = 0;
final long download_bytes = 0;
boolean bNewConnection = this.newReadableStorageConnection(group_name, remote_filename);
Socket storageSocket = this.storageServer.getSocket();
try
{
ProtoCommon.RecvHeaderInfo header;
try
{
this.errno = 0;
this.send_download_package(group_name, remote_filename, file_offset, download_bytes);
InputStream in = storageSocket.getInputStream();
header = ProtoCommon.recvHeader(in, ProtoCommon.STORAGE_PROTO_CMD_RESP, -1);
this.errno = header.errno;
if (header.errno != 0)
{
return header.errno;
}
byte[] buff = new byte[256 * 1024];
long remainBytes = header.body_len;
int bytes;
//System.out.println("expect_body_len=" + header.body_len);
while (remainBytes > 0)
{
if ((bytes=in.read(buff, 0, remainBytes > buff.length ? buff.length : (int)remainBytes)) < 0)
{
throw new IOException("recv package size " + (header.body_len - remainBytes) + " != " + header.body_len);
}
out.write(buff, 0, bytes);
remainBytes -= bytes;
//System.out.println("totalBytes=" + (header.body_len - remainBytes));
}
return 0;
}
catch(IOException ex)
{
if (this.errno == 0)
{
this.errno = ProtoCommon.ERR_NO_EIO;
}
throw ex;
}
}
catch(IOException ex)
{
if (!bNewConnection)
{
try
{
System.out.println("关闭1");
this.storageServer.close();
}
catch(IOException ex1)
{
ex1.printStackTrace();
}
finally
{
this.storageServer = null;
}
}
throw ex;
}
finally
{
if (bNewConnection)
{
try
{
System.out.println("关闭2");
this.storageServer.close();
}
catch(IOException ex1)
{
ex1.printStackTrace();
}
finally
{
this.storageServer = null;
}
}
}
}
下载的过程中没有做别的操作
|
|