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