FILERF 发表于 2014-12-12 10:58

文件下载错误

本帖最后由 FILERF 于 2014-12-13 11:36 编辑

下载一个大容量文件,1.3G左右。下载20多分钟后就停止了,java客户端没有报错,查看storage.log发现如下问题:

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;
                                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;
                                }
                        }
                }
        }

下载的过程中没有做别的操作

页: [1]
查看完整版本: 文件下载错误