1 Star 0 Fork 0

pulin88/mymuduo

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
Buffer.cc 1.01 KB
一键复制 编辑 原始数据 按行查看 历史
vmware_centos_pulin 提交于 2022-02-12 01:40 . mymuduo init
#include "Buffer.h"
#include <sys/uio.h>
#include <unistd.h>
#include <errno.h>
// 从fd上读取数据
ssize_t Buffer::readFd(int fd, int *saveErrno)
{
char extrabuf[65536] = {0}; // 栈上内存空间 64K
struct iovec vec[2];
const size_t writable = writableBytes();
vec[0].iov_base = begin() + writerIndex_;
vec[0].iov_len = writable;
vec[1].iov_base = extrabuf;
vec[1].iov_len = sizeof extrabuf;
// 保证writable的空间稳定大于64K
const int iovcnt = (writable < sizeof extrabuf) ? 2 : 1;
const size_t n = ::readv(fd, vec, iovcnt);
if(n < 0)
*saveErrno = errno;
else if(n <= writable)
writerIndex_ += n;
else
{
writerIndex_ = buffer_.size();
append(extrabuf, n - writable); // 填够当前buffer_,同时makeSpace
}
return n;
}
// 通过fd发送数据
ssize_t Buffer::writeFd(int fd, int *saveErrno)
{
ssize_t n = ::write(fd, peek(), readableBytes());
if(n < 0)
*saveErrno = errno;
return n;
}
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
C++
1
https://gitee.com/pulin88/mymuduo.git
git@gitee.com:pulin88/mymuduo.git
pulin88
mymuduo
mymuduo
main

搜索帮助