Chinaunix

标题: 超过2G文件,同步出错,1.99没有问题 [打印本页]

作者: martinhanmj    时间: 2009-12-08 10:31
标题: 超过2G文件,同步出错,1.99没有问题
请教版主,这个是不是int 32位溢出的问题,我目前是1.21版。


      同步端错误 是 invalid argument

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

      谢谢!!
作者: MYCY07    时间: 2009-12-09 12:10
标题: 回复 #1 martinhanmj 的帖子
现在最新版都V1.23 了,建议楼主用最新的测试看看
作者: martinhanmj    时间: 2009-12-15 12:02
标题: 应该是找到问题了
期待楼主nb哥 发布新版本。

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


个人意见。
作者: happy_fish100    时间: 2009-12-15 19:06
标题: 回复 #3 martinhanmj 的帖子
如果解决这个问题的呢?能否分享一下?
作者: martinhanmj    时间: 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;
}


个人意见,
作者: happy_fish100    时间: 2009-12-16 18:43
标题: 回复 #5 martinhanmj 的帖子
非常感谢LZ的倾情奉献,我会尽快修复这个问题,谢谢啦!
作者: martinhanmj    时间: 2009-12-16 19:53
标题: 回复 #6 happy_fish100 的帖子
you are welcome!




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2