mirror of
https://github.com/ZLMediaKit/ZLMediaKit.git
synced 2024-11-30 06:59:22 +08:00
bug fixed on http server
This commit is contained in:
parent
8ef84473fc
commit
1262c4c51d
@ -343,7 +343,10 @@ inline HttpSession::HttpCode HttpSession::Handle_Req_GET() {
|
|||||||
fclose(pFp);
|
fclose(pFp);
|
||||||
});
|
});
|
||||||
static uint32_t sendBufSize = mINI::Instance()[Config::Http::kSendBufSize].as<uint32_t>();
|
static uint32_t sendBufSize = mINI::Instance()[Config::Http::kSendBufSize].as<uint32_t>();
|
||||||
|
//不允许主动丢包
|
||||||
sock->setShouldDropPacket(false);
|
sock->setShouldDropPacket(false);
|
||||||
|
//缓存大小为两个包,太大可能导致发送时间太长从而超时
|
||||||
|
sock->setSendPktSize(2);
|
||||||
weak_ptr<HttpSession> weakSelf = dynamic_pointer_cast<HttpSession>(shared_from_this());
|
weak_ptr<HttpSession> weakSelf = dynamic_pointer_cast<HttpSession>(shared_from_this());
|
||||||
auto onFlush = [pFilePtr,bClose,weakSelf,piLeft]() {
|
auto onFlush = [pFilePtr,bClose,weakSelf,piLeft]() {
|
||||||
TimeTicker();
|
TimeTicker();
|
||||||
@ -357,14 +360,20 @@ inline HttpSession::HttpCode HttpSession::Handle_Req_GET() {
|
|||||||
//本次需要读取文件字节数
|
//本次需要读取文件字节数
|
||||||
int64_t iReq = MIN(sendBufSize,*piLeft);
|
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;
|
*piLeft -= iRead;
|
||||||
|
|
||||||
if (iRead < iReq || !*piLeft) {
|
if (iRead < iReq || !*piLeft) {
|
||||||
//文件读完
|
//文件读完
|
||||||
|
//InfoL << "send complete!" << iRead << " " << iReq << " " << *piLeft;
|
||||||
if(iRead>0) {
|
if(iRead>0) {
|
||||||
sendBuf->setSize(iRead);
|
sendBuf->setSize(iRead);
|
||||||
|
strongSelf->sock->setSendPktSize(3);//强制写入socket缓存
|
||||||
strongSelf->sock->send(sendBuf,SOCKET_DEFAULE_FLAGS | FLAG_MORE);
|
strongSelf->sock->send(sendBuf,SOCKET_DEFAULE_FLAGS | FLAG_MORE);
|
||||||
}
|
}
|
||||||
if(bClose) {
|
if(bClose) {
|
||||||
@ -377,13 +386,19 @@ inline HttpSession::HttpCode HttpSession::Handle_Req_GET() {
|
|||||||
int iSent = strongSelf->sock->send(sendBuf,SOCKET_DEFAULE_FLAGS | FLAG_MORE);
|
int iSent = strongSelf->sock->send(sendBuf,SOCKET_DEFAULE_FLAGS | FLAG_MORE);
|
||||||
if(iSent == -1) {
|
if(iSent == -1) {
|
||||||
//send error
|
//send error
|
||||||
|
//InfoL << "send error";
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if(iSent < iRead) {
|
if(iSent < iRead) {
|
||||||
//send wait
|
//send wait
|
||||||
|
//InfoL << "send wait";
|
||||||
|
//数据回滚
|
||||||
|
fseek(pFilePtr.get(), -iRead, SEEK_CUR);
|
||||||
|
*piLeft += iRead;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
//send success
|
//send success
|
||||||
|
//InfoL << "send success";
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user