完善write read hook函数
This commit is contained in:
parent
fa29bd6c10
commit
7031d3ceb0
@ -1,6 +1,8 @@
|
||||
#include "coroutine_hook.hpp"
|
||||
#include "coroutine.hpp"
|
||||
#include "logger.hpp"
|
||||
#include "fd_event.hpp"
|
||||
#include "reactor.hpp"
|
||||
#include <dlfcn.h>
|
||||
|
||||
|
||||
@ -22,24 +24,44 @@ namespace tinyrpc {
|
||||
|
||||
ssize_t read_hook(int fd, void *buf, size_t count) {
|
||||
logger() << "read_hook is calling";
|
||||
// TODO ...
|
||||
FdEvent fe(fd);
|
||||
fe.addListenEvent(IOEvent::READ);
|
||||
Coroutine* curCoro = Coroutine::getCurrCoroutine();
|
||||
fe.setReadCallback([curCoro] () -> void{
|
||||
curCoro->resume();
|
||||
});
|
||||
// fd 设置为 nonblock
|
||||
fe.setNonblock();
|
||||
// 尝试一下系统read, 返回值大于0直接返回
|
||||
int ret = g_sys_read_fun(fd, buf, count);
|
||||
if(ret > 0) return ret;
|
||||
// fd 添加到 epoll 中
|
||||
Reactor::getReactor()->addFdEvent(&fe);
|
||||
Coroutine::yeild(); // yeild
|
||||
Reactor::getReactor()->delFdEvent(&fe);
|
||||
// 调用系统 read 返回
|
||||
return -1;
|
||||
return g_sys_read_fun(fd, buf, count);
|
||||
}
|
||||
|
||||
ssize_t write_hook(int fd, const void *buf, size_t count) {
|
||||
logger() << "write_hook is calling";
|
||||
// TODO ...
|
||||
FdEvent fe(fd);
|
||||
fe.addListenEvent(IOEvent::WRITE);
|
||||
Coroutine* curCoro = Coroutine::getCurrCoroutine();
|
||||
fe.setWriteCallback([curCoro] () -> void{
|
||||
curCoro->resume();
|
||||
});
|
||||
// fd 设置为 nonblock
|
||||
// 尝试一下系统read, 返回值大于0直接返回
|
||||
fe.setNonblock();
|
||||
// 尝试一下系统 write 返回值大于0直接返回
|
||||
int ret = g_sys_write_fun(fd, buf, count);
|
||||
if(ret > 0) return ret;
|
||||
// fd 添加到 epoll 中
|
||||
Reactor::getReactor()->addFdEvent(&fe);
|
||||
Coroutine::yeild(); // yeild
|
||||
// 调用系统 read 返回
|
||||
return -1;
|
||||
Reactor::getReactor()->delFdEvent(&fe);
|
||||
// 调用系统 write 返回
|
||||
return g_sys_write_fun(fd, buf, count);
|
||||
}
|
||||
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user