Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_jdk
提交
af16ded6
D
dragonwell8_jdk
项目概览
openanolis
/
dragonwell8_jdk
通知
3
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看板
体验新版 GitCode,发现更多精彩内容 >>
提交
af16ded6
编写于
8月 06, 2014
作者:
M
michaelm
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
8053963: (dc) Use DatagramChannel.receive() instead of read() in connect()
Reviewed-by: chegar, alanb
上级
1e325589
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
61 addition
and
23 deletion
+61
-23
src/share/classes/java/net/DatagramSocket.java
src/share/classes/java/net/DatagramSocket.java
+17
-10
src/share/classes/sun/nio/ch/DatagramChannelImpl.java
src/share/classes/sun/nio/ch/DatagramChannelImpl.java
+1
-1
src/windows/native/java/net/AbstractPlainDatagramSocketImpl.c
...windows/native/java/net/AbstractPlainDatagramSocketImpl.c
+43
-12
未找到文件。
src/share/classes/java/net/DatagramSocket.java
浏览文件 @
af16ded6
...
...
@@ -769,6 +769,7 @@ class DatagramSocket implements java.io.Closeable {
}
// end of while
}
}
DatagramPacket
tmp
=
null
;
if
((
connectState
==
ST_CONNECTED_NO_IMPL
)
||
explicitFilter
)
{
// We have to do the filtering the old fashioned way since
// the native impl doesn't support connect or the connect
...
...
@@ -793,11 +794,13 @@ class DatagramSocket implements java.io.Closeable {
if
((!
connectedAddress
.
equals
(
peekAddress
))
||
(
connectedPort
!=
peekPort
))
{
// throw the packet away and silently continue
DatagramPacket
tmp
=
new
DatagramPacket
(
tmp
=
new
DatagramPacket
(
new
byte
[
1024
],
1024
);
getImpl
().
receive
(
tmp
);
if
(
explicitFilter
)
{
bytesLeftToFilter
-=
tmp
.
getLength
();
if
(
checkFiltering
(
tmp
))
{
stop
=
true
;
}
}
}
else
{
stop
=
true
;
...
...
@@ -807,18 +810,22 @@ class DatagramSocket implements java.io.Closeable {
// If the security check succeeds, or the datagram is
// connected then receive the packet
getImpl
().
receive
(
p
);
if
(
explicitFilter
)
{
bytesLeftToFilter
-=
p
.
getLength
();
if
(
bytesLeftToFilter
<=
0
)
{
explicitFilter
=
false
;
}
else
{
// break out of filter, if there is no more data queued
explicitFilter
=
getImpl
().
dataAvailable
()
>
0
;
}
if
(
explicitFilter
&&
tmp
==
null
)
{
// packet was not filtered, account for it here
checkFiltering
(
p
);
}
}
}
private
boolean
checkFiltering
(
DatagramPacket
p
)
throws
SocketException
{
bytesLeftToFilter
-=
p
.
getLength
();
if
(
bytesLeftToFilter
<=
0
||
getImpl
().
dataAvailable
()
<=
0
)
{
explicitFilter
=
false
;
return
true
;
}
return
false
;
}
/**
* Gets the local address to which the socket is bound.
*
...
...
src/share/classes/sun/nio/ch/DatagramChannelImpl.java
浏览文件 @
af16ded6
...
...
@@ -768,7 +768,7 @@ class DatagramChannelImpl
}
do
{
tmpBuf
.
clear
();
}
while
(
re
ad
(
tmpBuf
)
>
0
);
}
while
(
re
ceive
(
tmpBuf
)
!=
null
);
}
finally
{
if
(
blocking
)
{
configureBlocking
(
true
);
...
...
src/windows/native/java/net/AbstractPlainDatagramSocketImpl.c
浏览文件 @
af16ded6
...
...
@@ -32,9 +32,11 @@
#include "java_net_AbstractPlainDatagramSocketImpl.h"
static
jfieldID
IO_fd_fdID
;
static
jfieldID
IO_fd_fdID
=
NULL
;
static
jfieldID
apdsi_fdID
=
NULL
;
static
jfieldID
apdsi_fdID
;
static
jfieldID
apdsi_fd1ID
=
NULL
;
static
jclass
two_stacks_clazz
=
NULL
;
/*
...
...
@@ -48,10 +50,21 @@ Java_java_net_AbstractPlainDatagramSocketImpl_init(JNIEnv *env, jclass cls) {
apdsi_fdID
=
(
*
env
)
->
GetFieldID
(
env
,
cls
,
"fd"
,
"Ljava/io/FileDescriptor;"
);
CHECK_NULL
(
apdsi_fdID
);
IO_fd_fdID
=
NET_GetFileDescriptorID
(
env
);
CHECK_NULL
(
IO_fd_fdID
);
two_stacks_clazz
=
(
*
env
)
->
FindClass
(
env
,
"java/net/TwoStacksPlainDatagramSocketImpl"
);
CHECK_NULL
(
two_stacks_clazz
);
/* Handle both TwoStacks and DualStack here */
if
(
JNU_Equals
(
env
,
cls
,
two_stacks_clazz
))
{
/* fd1 present only in TwoStack.. */
apdsi_fd1ID
=
(
*
env
)
->
GetFieldID
(
env
,
cls
,
"fd1"
,
"Ljava/io/FileDescriptor;"
);
CHECK_NULL
(
apdsi_fd1ID
);
}
JNU_CHECK_EXCEPTION
(
env
);
}
...
...
@@ -63,20 +76,38 @@ Java_java_net_AbstractPlainDatagramSocketImpl_init(JNIEnv *env, jclass cls) {
JNIEXPORT
jint
JNICALL
Java_java_net_AbstractPlainDatagramSocketImpl_dataAvailable
(
JNIEnv
*
env
,
jobject
this
)
{
SOCKET
fd
;
int
retval
;
SOCKET
fd1
;
int
rv
=
-
1
,
rv1
=
-
1
;
jobject
fdObj
=
(
*
env
)
->
GetObjectField
(
env
,
this
,
apdsi_fdID
);
if
(
IS_NULL
(
fdObj
))
{
JNU_ThrowByName
(
env
,
JNU_JAVANETPKG
"SocketException"
,
"Socket closed"
);
return
-
1
;
if
(
!
IS_NULL
(
fdObj
))
{
int
retval
=
0
;
fd
=
(
SOCKET
)(
*
env
)
->
GetIntField
(
env
,
fdObj
,
IO_fd_fdID
);
rv
=
ioctlsocket
(
fd
,
FIONREAD
,
&
retval
);
if
(
retval
>
0
)
{
return
retval
;
}
}
if
(
!
IS_NULL
(
apdsi_fd1ID
))
{
/* TwoStacks */
jobject
fd1Obj
=
(
*
env
)
->
GetObjectField
(
env
,
this
,
apdsi_fd1ID
);
if
(
!
IS_NULL
(
fd1Obj
))
{
int
retval
=
0
;
fd1
=
(
SOCKET
)(
*
env
)
->
GetIntField
(
env
,
fd1Obj
,
IO_fd_fdID
);
rv1
=
ioctlsocket
(
fd1
,
FIONREAD
,
&
retval
);
if
(
retval
>
0
)
{
return
retval
;
}
}
}
fd
=
(
SOCKET
)(
*
env
)
->
GetIntField
(
env
,
fdObj
,
IO_fd_fdID
);
if
(
ioctlsocket
(
fd
,
FIONREAD
,
&
retval
)
<
0
)
{
if
(
rv
<
0
&&
rv1
<
0
)
{
JNU_ThrowByName
(
env
,
JNU_JAVANETPKG
"SocketException"
,
"Socket closed"
);
return
-
1
;
}
return
retval
;
return
0
;
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录