Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
qemu
提交
993295fe
Q
qemu
项目概览
openeuler
/
qemu
通知
10
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
Q
qemu
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
993295fe
编写于
9月 17, 2011
作者:
P
Paolo Bonzini
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
add qemu_send_full and qemu_recv_full
Signed-off-by:
N
Paolo Bonzini
<
pbonzini@redhat.com
>
上级
3799ce4a
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
71 addition
and
0 deletion
+71
-0
osdep.c
osdep.c
+67
-0
qemu-common.h
qemu-common.h
+4
-0
未找到文件。
osdep.c
浏览文件 @
993295fe
...
...
@@ -166,3 +166,70 @@ int qemu_accept(int s, struct sockaddr *addr, socklen_t *addrlen)
return
ret
;
}
/*
* A variant of send(2) which handles partial write.
*
* Return the number of bytes transferred, which is only
* smaller than `count' if there is an error.
*
* This function won't work with non-blocking fd's.
* Any of the possibilities with non-bloking fd's is bad:
* - return a short write (then name is wrong)
* - busy wait adding (errno == EAGAIN) to the loop
*/
ssize_t
qemu_send_full
(
int
fd
,
const
void
*
buf
,
size_t
count
,
int
flags
)
{
ssize_t
ret
=
0
;
ssize_t
total
=
0
;
while
(
count
)
{
ret
=
send
(
fd
,
buf
,
count
,
flags
);
if
(
ret
<
0
)
{
if
(
errno
==
EINTR
)
{
continue
;
}
break
;
}
count
-=
ret
;
buf
+=
ret
;
total
+=
ret
;
}
return
total
;
}
/*
* A variant of recv(2) which handles partial write.
*
* Return the number of bytes transferred, which is only
* smaller than `count' if there is an error.
*
* This function won't work with non-blocking fd's.
* Any of the possibilities with non-bloking fd's is bad:
* - return a short write (then name is wrong)
* - busy wait adding (errno == EAGAIN) to the loop
*/
ssize_t
qemu_recv_full
(
int
fd
,
void
*
buf
,
size_t
count
,
int
flags
)
{
ssize_t
ret
=
0
;
ssize_t
total
=
0
;
while
(
count
)
{
ret
=
qemu_recv
(
fd
,
buf
,
count
,
flags
);
if
(
ret
<=
0
)
{
if
(
ret
<
0
&&
errno
==
EINTR
)
{
continue
;
}
break
;
}
count
-=
ret
;
buf
+=
ret
;
total
+=
ret
;
}
return
total
;
}
qemu-common.h
浏览文件 @
993295fe
...
...
@@ -173,6 +173,10 @@ void *qemu_oom_check(void *ptr);
int
qemu_open
(
const
char
*
name
,
int
flags
,
...);
ssize_t
qemu_write_full
(
int
fd
,
const
void
*
buf
,
size_t
count
)
QEMU_WARN_UNUSED_RESULT
;
ssize_t
qemu_send_full
(
int
fd
,
const
void
*
buf
,
size_t
count
,
int
flags
)
QEMU_WARN_UNUSED_RESULT
;
ssize_t
qemu_recv_full
(
int
fd
,
const
void
*
buf
,
size_t
count
,
int
flags
)
QEMU_WARN_UNUSED_RESULT
;
void
qemu_set_cloexec
(
int
fd
);
#ifndef _WIN32
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录