- 論壇徽章:
- 2
|
本帖最后由 FILERF 于 2014-12-13 11:36 編輯
下載一個(gè)大容量文件,1.3G左右。下載20多分鐘后就停止了,java客戶端沒(méi)有報(bào)錯(cuò),查看storage.log發(fā)現(xiàn)如下問(wèn)題:
[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("關(guān)閉1");
this.storageServer.close();
}
catch(IOException ex1)
{
ex1.printStackTrace();
}
finally
{
this.storageServer = null;
}
}
throw ex;
}
finally
{
if (bNewConnection)
{
try
{
System.out.println("關(guān)閉2");
this.storageServer.close();
}
catch(IOException ex1)
{
ex1.printStackTrace();
}
finally
{
this.storageServer = null;
}
}
}
}
下載的過(guò)程中沒(méi)有做別的操作
|
|