Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
tools-mirror
Micropython
提交
80a25810
M
Micropython
项目概览
tools-mirror
/
Micropython
12 个月 前同步成功
通知
0
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
M
Micropython
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
80a25810
编写于
9月 02, 2016
作者:
D
Danielle Madeley
提交者:
Damien George
10月 17, 2018
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
unix/modusocket: Initial implementation of socket.settimeout().
上级
0f6f86ca
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
33 addition
and
0 deletion
+33
-0
ports/unix/modusocket.c
ports/unix/modusocket.c
+33
-0
未找到文件。
ports/unix/modusocket.c
浏览文件 @
80a25810
...
...
@@ -93,6 +93,11 @@ STATIC mp_uint_t socket_read(mp_obj_t o_in, void *buf, mp_uint_t size, int *errc
mp_int_t
r
=
read
(
o
->
fd
,
buf
,
size
);
if
(
r
==
-
1
)
{
*
errcode
=
errno
;
if
(
*
errcode
==
EAGAIN
)
{
*
errcode
=
MP_ETIMEDOUT
;
}
return
MP_STREAM_ERROR
;
}
return
r
;
...
...
@@ -103,6 +108,11 @@ STATIC mp_uint_t socket_write(mp_obj_t o_in, const void *buf, mp_uint_t size, in
mp_int_t
r
=
write
(
o
->
fd
,
buf
,
size
);
if
(
r
==
-
1
)
{
*
errcode
=
errno
;
if
(
*
errcode
==
EAGAIN
)
{
*
errcode
=
MP_ETIMEDOUT
;
}
return
MP_STREAM_ERROR
;
}
return
r
;
...
...
@@ -314,6 +324,28 @@ STATIC mp_obj_t socket_setblocking(mp_obj_t self_in, mp_obj_t flag_in) {
}
STATIC
MP_DEFINE_CONST_FUN_OBJ_2
(
socket_setblocking_obj
,
socket_setblocking
);
STATIC
mp_obj_t
socket_settimeout
(
mp_obj_t
self_in
,
mp_obj_t
timeout_in
)
{
mp_obj_socket_t
*
self
=
MP_OBJ_TO_PTR
(
self_in
);
struct
timeval
tv
=
{
0
,};
if
(
timeout_in
==
mp_const_none
)
{
setsockopt
(
self
->
fd
,
SOL_SOCKET
,
SO_RCVTIMEO
,
NULL
,
0
);
setsockopt
(
self
->
fd
,
SOL_SOCKET
,
SO_SNDTIMEO
,
NULL
,
0
);
}
else
{
tv
.
tv_sec
=
mp_obj_get_int
(
timeout_in
);
#if MICROPY_PY_BUILTINS_FLOAT
tv
.
tv_usec
=
(
mp_obj_get_float
(
timeout_in
)
-
tv
.
tv_sec
)
*
1000000
;
#endif
setsockopt
(
self
->
fd
,
SOL_SOCKET
,
SO_RCVTIMEO
,
&
tv
,
sizeof
(
struct
timeval
));
setsockopt
(
self
->
fd
,
SOL_SOCKET
,
SO_SNDTIMEO
,
&
tv
,
sizeof
(
struct
timeval
));
}
return
mp_const_none
;
}
STATIC
MP_DEFINE_CONST_FUN_OBJ_2
(
socket_settimeout_obj
,
socket_settimeout
);
STATIC
mp_obj_t
socket_makefile
(
size_t
n_args
,
const
mp_obj_t
*
args
)
{
// TODO: CPython explicitly says that closing returned object doesn't close
// the original socket (Python2 at all says that fd is dup()ed). But we
...
...
@@ -369,6 +401,7 @@ STATIC const mp_rom_map_elem_t usocket_locals_dict_table[] = {
{
MP_ROM_QSTR
(
MP_QSTR_sendto
),
MP_ROM_PTR
(
&
socket_sendto_obj
)
},
{
MP_ROM_QSTR
(
MP_QSTR_setsockopt
),
MP_ROM_PTR
(
&
socket_setsockopt_obj
)
},
{
MP_ROM_QSTR
(
MP_QSTR_setblocking
),
MP_ROM_PTR
(
&
socket_setblocking_obj
)
},
{
MP_ROM_QSTR
(
MP_QSTR_settimeout
),
MP_ROM_PTR
(
&
socket_settimeout_obj
)
},
{
MP_ROM_QSTR
(
MP_QSTR_close
),
MP_ROM_PTR
(
&
mp_stream_close_obj
)
},
};
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录