Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
Z
ZLMediaKit
概览
Overview
Details
Activity
Cycle Analytics
版本库
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
问题
0
Issues
0
列表
Board
标记
里程碑
合并请求
0
Merge Requests
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
Snippets
成员
Collapse sidebar
Close sidebar
活动
图像
聊天
创建新问题
作业
提交
Issue Boards
Open sidebar
张翔宇
ZLMediaKit
Commits
1262c4c5
Commit
1262c4c5
authored
7 years ago
by
root
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
bug fixed on http server
parent
8ef84473
隐藏空白字符变更
内嵌
并排
正在显示
1 个修改的文件
包含
18 行增加
和
3 行删除
+18
-3
src/Http/HttpSession.cpp
+18
-3
没有找到文件。
src/Http/HttpSession.cpp
查看文件 @
1262c4c5
...
...
@@ -343,7 +343,10 @@ inline HttpSession::HttpCode HttpSession::Handle_Req_GET() {
fclose
(
pFp
);
});
static
uint32_t
sendBufSize
=
mINI
::
Instance
()[
Config
::
Http
::
kSendBufSize
].
as
<
uint32_t
>
();
//不允许主动丢包
sock
->
setShouldDropPacket
(
false
);
//缓存大小为两个包,太大可能导致发送时间太长从而超时
sock
->
setSendPktSize
(
2
);
weak_ptr
<
HttpSession
>
weakSelf
=
dynamic_pointer_cast
<
HttpSession
>
(
shared_from_this
());
auto
onFlush
=
[
pFilePtr
,
bClose
,
weakSelf
,
piLeft
]()
{
TimeTicker
();
...
...
@@ -356,15 +359,21 @@ inline HttpSession::HttpCode HttpSession::Handle_Req_GET() {
sendBuf
->
setCapacity
(
sendBufSize
);
//本次需要读取文件字节数
int64_t
iReq
=
MIN
(
sendBufSize
,
*
piLeft
);
//读文件
int64_t
iRead
=
fread
(
sendBuf
->
data
(),
1
,
iReq
,
pFilePtr
.
get
());
//读文件
int
iRead
;
do
{
iRead
=
fread
(
sendBuf
->
data
(),
1
,
iReq
,
pFilePtr
.
get
());
}
while
(
-
1
==
iRead
&&
UV_EINTR
==
get_uv_error
(
false
));
//文件剩余字节数
*
piLeft
-=
iRead
;
if
(
iRead
<
iReq
||
!*
piLeft
)
{
//文件读完
//InfoL << "send complete!" << iRead << " " << iReq << " " << *piLeft;
if
(
iRead
>
0
)
{
sendBuf
->
setSize
(
iRead
);
sendBuf
->
setSize
(
iRead
);
strongSelf
->
sock
->
setSendPktSize
(
3
);
//强制写入socket缓存
strongSelf
->
sock
->
send
(
sendBuf
,
SOCKET_DEFAULE_FLAGS
|
FLAG_MORE
);
}
if
(
bClose
)
{
...
...
@@ -377,13 +386,19 @@ inline HttpSession::HttpCode HttpSession::Handle_Req_GET() {
int
iSent
=
strongSelf
->
sock
->
send
(
sendBuf
,
SOCKET_DEFAULE_FLAGS
|
FLAG_MORE
);
if
(
iSent
==
-
1
)
{
//send error
//InfoL << "send error";
return
false
;
}
if
(
iSent
<
iRead
)
{
//send wait
//InfoL << "send wait";
//数据回滚
fseek
(
pFilePtr
.
get
(),
-
iRead
,
SEEK_CUR
);
*
piLeft
+=
iRead
;
return
true
;
}
//send success
//InfoL << "send success";
}
return
false
;
};
...
...
This diff is collapsed.
Click to expand it.
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论