Skip to content

Commit 6ed38a0

Browse files
authored
Fix a bug when sending big files on Windows (#96)
1 parent 13c659a commit 6ed38a0

File tree

2 files changed

+8
-4
lines changed

2 files changed

+8
-4
lines changed

trantor/net/inner/TcpConnectionImpl.cc

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,9 @@
3030
#include <openssl/ssl.h>
3131
#include <openssl/err.h>
3232
#endif
33+
#ifdef _WIN32
34+
#define stat _stati64
35+
#endif
3336

3437
using namespace trantor;
3538

@@ -712,7 +715,7 @@ void TcpConnectionImpl::sendInLoop(const char *buffer, size_t length)
712715
if (writeBufferList_.empty())
713716
{
714717
BufferNodePtr node(new BufferNode);
715-
node->msgBuffer_ = std::shared_ptr<MsgBuffer>(new MsgBuffer);
718+
node->msgBuffer_ = std::make_shared<MsgBuffer>();
716719
writeBufferList_.push_back(std::move(node));
717720
}
718721
#ifndef _WIN32
@@ -722,7 +725,7 @@ void TcpConnectionImpl::sendInLoop(const char *buffer, size_t length)
722725
#endif
723726
{
724727
BufferNodePtr node(new BufferNode);
725-
node->msgBuffer_ = std::shared_ptr<MsgBuffer>(new MsgBuffer);
728+
node->msgBuffer_ = std::make_shared<MsgBuffer>();
726729
writeBufferList_.push_back(std::move(node));
727730
}
728731
writeBufferList_.back()->msgBuffer_->append(
@@ -1193,7 +1196,7 @@ void TcpConnectionImpl::sendFileInLoop(const BufferNodePtr &filePtr)
11931196
&(*fileBufferPtr_)[0],
11941197
fileBufferPtr_->size());
11951198
#else
1196-
fseek(filePtr->sendFp_, filePtr->offset_, SEEK_SET);
1199+
_fseeki64(filePtr->sendFp_, filePtr->offset_, SEEK_SET);
11971200
if (!fileBufferPtr_)
11981201
{
11991202
fileBufferPtr_ = std::make_unique<std::vector<char>>(16 * 1024);

trantor/net/inner/TcpConnectionImpl.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -225,11 +225,12 @@ class TcpConnectionImpl : public TcpConnection,
225225
{
226226
#ifndef _WIN32
227227
int sendFd_{-1};
228+
off_t offset_;
228229
#else
229230
FILE *sendFp_{nullptr};
231+
long long offset_;
230232
#endif
231233
ssize_t fileBytesToSend_;
232-
off_t offset_;
233234
std::shared_ptr<MsgBuffer> msgBuffer_;
234235
~BufferNode()
235236
{

0 commit comments

Comments
 (0)