Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_jdk
提交
9ac615ba
D
dragonwell8_jdk
项目概览
openanolis
/
dragonwell8_jdk
通知
4
Star
2
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
dragonwell8_jdk
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
9ac615ba
编写于
6月 07, 2014
作者:
L
luchsh
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
8043954: AIX: Add async connect() support to NET_Connect()
Reviewed-by: alanb
上级
592f0c6b
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
51 addition
and
1 deletion
+51
-1
src/aix/native/java/net/aix_close.c
src/aix/native/java/net/aix_close.c
+51
-1
未找到文件。
src/aix/native/java/net/aix_close.c
浏览文件 @
9ac615ba
...
@@ -359,7 +359,57 @@ int NET_Accept(int s, struct sockaddr *addr, int *addrlen) {
...
@@ -359,7 +359,57 @@ int NET_Accept(int s, struct sockaddr *addr, int *addrlen) {
}
}
int
NET_Connect
(
int
s
,
struct
sockaddr
*
addr
,
int
addrlen
)
{
int
NET_Connect
(
int
s
,
struct
sockaddr
*
addr
,
int
addrlen
)
{
BLOCKING_IO_RETURN_INT
(
s
,
connect
(
s
,
addr
,
addrlen
)
);
int
crc
=
-
1
,
prc
=
-
1
;
threadEntry_t
self
;
fdEntry_t
*
fdEntry
=
getFdEntry
(
s
);
if
(
fdEntry
==
NULL
)
{
errno
=
EBADF
;
return
-
1
;
}
/* On AIX, when the system call connect() is interrupted, the connection
* is not aborted and it will be established asynchronously by the kernel.
* Hence, no need to restart connect() when EINTR is received
*/
startOp
(
fdEntry
,
&
self
);
crc
=
connect
(
s
,
addr
,
addrlen
);
endOp
(
fdEntry
,
&
self
);
if
(
crc
==
-
1
&&
errno
==
EINTR
)
{
struct
pollfd
s_pollfd
;
int
sockopt_arg
=
0
;
socklen_t
len
;
s_pollfd
.
fd
=
s
;
s_pollfd
.
events
=
POLLOUT
|
POLLERR
;
/* poll the file descriptor */
do
{
startOp
(
fdEntry
,
&
self
);
prc
=
poll
(
&
s_pollfd
,
1
,
-
1
);
endOp
(
fdEntry
,
&
self
);
}
while
(
prc
==
-
1
&&
errno
==
EINTR
);
if
(
prc
<
0
)
return
prc
;
len
=
sizeof
(
sockopt_arg
);
/* Check whether the connection has been established */
if
(
getsockopt
(
s
,
SOL_SOCKET
,
SO_ERROR
,
&
sockopt_arg
,
&
len
)
==
-
1
)
return
-
1
;
if
(
sockopt_arg
!=
0
)
{
errno
=
sockopt_arg
;
return
-
1
;
}
}
else
{
return
crc
;
}
/* At this point, fd is connected. Set successful return code */
return
0
;
}
}
#ifndef USE_SELECT
#ifndef USE_SELECT
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录