免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2682 | 回复: 6
打印 上一主题 下一主题

[FastDFS] 超过2G文件,同步出错,1.99没有问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-12-08 10:31 |只看该作者 |倒序浏览
请教版主,这个是不是int 32位溢出的问题,我目前是1.21版。


      同步端错误 是 invalid argument

      被同步端的错误日志 是  transport endpoint is not connected

      谢谢!!

论坛徽章:
0
2 [报告]
发表于 2009-12-09 12:10 |只看该作者

回复 #1 martinhanmj 的帖子

现在最新版都V1.23 了,建议楼主用最新的测试看看

论坛徽章:
0
3 [报告]
发表于 2009-12-15 12:02 |只看该作者

应该是找到问题了

期待楼主nb哥 发布新版本。

调试了一下,发现是sendfile 的问题,也查了文档,sendfile 内核2.6还不能很好的支持2g以上的文件,
稍微的改了下sockopt.c 中的tcpsendfile_ex 函数代码,发送2g以上文件就没有问题了。


个人意见。

论坛徽章:
4
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:56:11IT运维版块每日发帖之星
日期:2016-08-11 06:20:00IT运维版块每日发帖之星
日期:2016-08-15 06:20:00
4 [报告]
发表于 2009-12-15 19:06 |只看该作者

回复 #3 martinhanmj 的帖子

如果解决这个问题的呢?能否分享一下?

论坛徽章:
0
5 [报告]
发表于 2009-12-16 17:21 |只看该作者

哦,是不是可以这样

还是贴代码来的直接吧,

int file_2g_size = 1<<31 - 1;

while (remain_bytes > 0)
{
        if (remain_bytes > file_2g_size)
       {
            send_bytes = sendfile(sock, fd, &offset, file_2g_size);       
        }
        else
       {
            send_bytes = sendfile(sock, fd, &offset, remain_bytes);                 
       }
        if (send_bytes <= 0)
        {
                result = errno != 0 ? errno : EIO;
                break;
        }
       
        remain_bytes -= send_bytes;
}


个人意见,

论坛徽章:
4
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:56:11IT运维版块每日发帖之星
日期:2016-08-11 06:20:00IT运维版块每日发帖之星
日期:2016-08-15 06:20:00
6 [报告]
发表于 2009-12-16 18:43 |只看该作者

回复 #5 martinhanmj 的帖子

非常感谢LZ的倾情奉献,我会尽快修复这个问题,谢谢啦!

论坛徽章:
0
7 [报告]
发表于 2009-12-16 19:53 |只看该作者

回复 #6 happy_fish100 的帖子

you are welcome!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP