Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Oneflow-Inc
oneflow
提交
66634c7e
O
oneflow
项目概览
Oneflow-Inc
/
oneflow
上一次同步 2 年多
通知
13
Star
2733
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
O
oneflow
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
66634c7e
编写于
9月 28, 2017
作者:
W
willzhang4a58
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
read helper init
Former-commit-id:
61ce791b
上级
c126c1a9
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
102 addition
and
4 deletion
+102
-4
oneflow/core/comm_network/epoll/socket_read_helper.cpp
oneflow/core/comm_network/epoll/socket_read_helper.cpp
+77
-0
oneflow/core/comm_network/epoll/socket_read_helper.h
oneflow/core/comm_network/epoll/socket_read_helper.h
+24
-3
oneflow/core/comm_network/epoll/socket_write_helper.cpp
oneflow/core/comm_network/epoll/socket_write_helper.cpp
+1
-1
未找到文件。
oneflow/core/comm_network/epoll/socket_read_helper.cpp
0 → 100644
浏览文件 @
66634c7e
#include "oneflow/core/comm_network/epoll/socket_read_helper.h"
#include "oneflow/core/comm_network/epoll/epoll_data_comm_network.h"
#ifdef PLATFORM_POSIX
namespace
oneflow
{
SocketReadHelper
::~
SocketReadHelper
()
{
TODO
();
}
SocketReadHelper
::
SocketReadHelper
(
int
sockfd
,
CpuStream
*
cpu_stream
)
{
sockfd_
=
sockfd
;
cpu_stream_
=
cpu_stream
;
cur_read_handle_
=
&
SocketReadHelper
::
MsgHeadReadHandle
;
read_ptr_
=
reinterpret_cast
<
char
*>
(
&
cur_msg_
);
read_size_
=
sizeof
(
cur_msg_
);
}
void
SocketReadHelper
::
NotifyMeSocketReadable
()
{
cpu_stream_
->
SendWork
(
std
::
bind
(
&
SocketReadHelper
::
ReadUntilSocketNotReadable
,
this
));
}
void
SocketReadHelper
::
ReadUntilSocketNotReadable
()
{
while
((
this
->*
cur_read_handle_
)())
{}
}
bool
SocketReadHelper
::
MsgHeadReadHandle
()
{
DoCurRead
(
&
SocketReadHelper
::
SetStatusWhenMsgHeadDone
);
}
bool
SocketReadHelper
::
MsgBodyReadHandle
()
{
DoCurRead
(
&
SocketReadHelper
::
SetStatusWhenMsgBodyDone
);
}
bool
SocketReadHelper
::
DoCurRead
(
bool
(
SocketReadHelper
::*
set_cur_read_done
)())
{
ssize_t
n
=
read
(
sockfd_
,
read_ptr_
,
read_size_
);
if
(
n
==
read_size_
)
{
return
(
this
->*
set_cur_read_done
)();
}
else
if
(
n
>=
0
)
{
read_ptr_
+=
n
;
read_size_
-=
n
;
return
true
;
}
else
{
CHECK_EQ
(
n
,
-
1
);
PCHECK
(
errno
==
EAGAIN
||
errno
==
EWOULDBLOCK
);
return
false
;
}
}
bool
SocketReadHelper
::
SetStatusWhenMsgHeadDone
()
{
switch
(
cur_msg_
.
msg_type
)
{
#define MAKE_ENTRY(x, y) \
case SocketMsgType::k##x: return SetStatusWhen##x##MsgHeadDone();
OF_PP_FOR_EACH_TUPLE
(
MAKE_ENTRY
,
SOCKET_MSG_TYPE_SEQ
);
#undef MAKE_ENTRY
default:
UNEXPECTED_RUN
();
}
UNEXPECTED_RUN
();
}
bool
SocketReadHelper
::
SetStatusWhenMsgBodyDone
()
{
cur_read_handle_
=
&
SocketReadHelper
::
MsgHeadReadHandle
;
read_ptr_
=
reinterpret_cast
<
char
*>
(
&
cur_msg_
);
read_size_
=
sizeof
(
cur_msg_
);
return
true
;
}
bool
SocketReadHelper
::
SetStatusWhenRequestWriteMsgHeadDone
()
{
TODO
();
}
bool
SocketReadHelper
::
SetStatusWhenRequestReadMsgHeadDone
()
{
TODO
();
}
bool
SocketReadHelper
::
SetStatusWhenActorMsgHeadDone
()
{
TODO
();
}
}
// namespace oneflow
#endif // PLATFORM_POSIX
oneflow/core/comm_network/epoll/socket_read_helper.h
浏览文件 @
66634c7e
#ifndef ONEFLOW_CORE_COMM_NETWORK_EPOLL_SOCKET_READ_HELPER_H_
#define ONEFLOW_CORE_COMM_NETWORK_EPOLL_SOCKET_READ_HELPER_H_
#include "oneflow/core/comm_network/epoll/socket_message.h"
#include "oneflow/core/device/cpu_stream.h"
#ifdef PLATFORM_POSIX
...
...
@@ -11,13 +12,33 @@ class SocketReadHelper final {
public:
OF_DISALLOW_COPY_AND_MOVE
(
SocketReadHelper
);
SocketReadHelper
()
=
delete
;
~
SocketReadHelper
()
{
TODO
();
}
~
SocketReadHelper
()
;
SocketReadHelper
(
int
sockfd
,
CpuStream
*
cpu_stream
)
{
TODO
();
}
SocketReadHelper
(
int
sockfd
,
CpuStream
*
cpu_stream
)
;
void
NotifyMeSocketReadable
()
{
TODO
();
}
void
NotifyMeSocketReadable
()
;
private:
void
ReadUntilSocketNotReadable
();
bool
MsgHeadReadHandle
();
bool
MsgBodyReadHandle
();
bool
DoCurRead
(
bool
(
SocketReadHelper
::*
set_cur_read_done
)());
bool
SetStatusWhenMsgHeadDone
();
bool
SetStatusWhenMsgBodyDone
();
#define MAKE_ENTRY(x, y) bool SetStatusWhen##x##MsgHeadDone();
OF_PP_FOR_EACH_TUPLE
(
MAKE_ENTRY
,
SOCKET_MSG_TYPE_SEQ
);
#undef MAKE_ENTRY
int
sockfd_
;
CpuStream
*
cpu_stream_
;
SocketMsg
cur_msg_
;
bool
(
SocketReadHelper
::*
cur_read_handle_
)();
char
*
read_ptr_
;
size_t
read_size_
;
};
}
// namespace oneflow
...
...
oneflow/core/comm_network/epoll/socket_write_helper.cpp
浏览文件 @
66634c7e
...
...
@@ -84,7 +84,7 @@ bool SocketWriteHelper::DoCurWrite(
if
(
n
==
write_size_
)
{
return
(
this
->*
set_cur_write_done
)();
}
else
if
(
n
>=
0
)
{
write_ptr_
=
write_ptr_
+
n
;
write_ptr_
+=
n
;
write_size_
-=
n
;
return
true
;
}
else
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录