<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css" style="display:none;"> P {margin-top:0;margin-bottom:0;} </style>
</head>
<body dir="ltr">
<div id="appendonsend" style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
</div>
<div style="font-family:Calibri,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
Hi Julia and Daniel,</div>
<div style="font-family:Calibri,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
   I ran the test as a standalone under  8 and 13 and got the following</div>
<div style="font-family:Calibri,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
on windows 10</div>
<div style="font-family:Calibri,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
<br>
</div>
<div style="font-family:Calibri,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
<span>$ java -version<br>
</span>
<div>java version "1.8.0_231"<br>
</div>
<div>Java(TM) SE Runtime Environment (build 1.8.0_231-b11)<br>
</div>
<div>Java HotSpot(TM) 64-Bit Server VM (build 25.231-b11, mixed mode)<br>
</div>
<span></span><br>
</div>
<div style="font-family:Calibri,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
<span>$ java PortUnreachableTest<br>
</span>
<div>Attempting to recreate server socket with port: 64195<br>
</div>
<div>PortUnreachableTest.recreateServerSocket: returning socket == /XXX.XXX.0.211:64195 obtained at first attempt with no sleep<br>
</div>
<div>Exception in thread "main" java.net.SocketTimeoutException: Receive timed out<br>
</div>
<div>        at java.net.DualStackPlainDatagramSocketImpl.socketReceiveOrPeekData(Native Method)<br>
</div>
<div>        at java.net.DualStackPlainDatagramSocketImpl.receive0(Unknown Source)<br>
</div>
<div>        at java.net.AbstractPlainDatagramSocketImpl.receive(Unknown Source)<br>
</div>
<div>        at java.net.DatagramSocket.receive(Unknown Source)<br>
</div>
<div>        at PortUnreachableTest.execute(PortUnreachableTest.java:136)<br>
</div>
<div>        at PortUnreachableTest.main(PortUnreachableTest.java:151)<br>
</div>
<span></span><br>
</div>
<div style="font-family:Calibri,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
<span>$ /cygdrive/c/JDK-INSTALLS/jdk-13/bin/java -version<br>
</span>
<div>openjdk version "13" 2019-09-17<br>
</div>
<div>OpenJDK Runtime Environment (build 13+33)<br>
</div>
<div>OpenJDK 64-Bit Server VM (build 13+33, mixed mode, sharing)<br>
</div>
<span></span><br>
</div>
<div style="font-family:Calibri,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
<span>$ /cygdrive/c/JDK-INSTALLS/jdk-13/bin/java PortUnreachableTest<br>
</span>
<div>Attempting to recreate server socket with port: 60473<br>
</div>
<div>PortUnreachableTest.recreateServerSocket: returning socket == /XXX.XXX.0.211:60473 obtained at first attempt with no sleep<br>
</div>
<div>Exception in thread "main" java.net.SocketTimeoutException: Receive timed out<br>
</div>
<div>        at java.base/java.net.DualStackPlainDatagramSocketImpl.socketReceiveOrPeekData(Native Method)<br>
</div>
<div>        at java.base/java.net.DualStackPlainDatagramSocketImpl.receive0(DualStackPlainDatagramSocketImpl.java:124)<br>
</div>
<div>        at java.base/java.net.AbstractPlainDatagramSocketImpl.receive(AbstractPlainDatagramSocketImpl.java:182)<br>
</div>
<div>        at java.base/java.net.DatagramSocket.receive(DatagramSocket.java:815)<br>
</div>
<div>        at PortUnreachableTest.execute(PortUnreachableTest.java:136)<br>
</div>
<div>        at PortUnreachableTest.main(PortUnreachableTest.java:151)<br>
</div>
<span></span><br>
</div>
<div style="font-family:Calibri,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
<br>
</div>
<div style="font-family:Calibri,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
<br>
</div>
<div style="font-family:Calibri,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
<br>
</div>
<div style="font-family:Calibri,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
<br>
</div>
<div style="font-family:Calibri,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
The test has a potential problem,  that is the  socket close can</div>
<div style="font-family:Calibri,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
cause the attempted send from server socket to client not to occur.</div>
<div style="font-family:Calibri,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
<br>
</div>
<div style="font-family:Calibri,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
the sock.send() can result in the application data being copied into the</div>
<div style="font-family:Calibri,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
kernel and queued for sending.  But the send may not take place immediately.</div>
<div style="font-family:Calibri,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
The data may not yet be sent when immediate close()</div>
<div style="font-family:Calibri,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
is executed causing the socket's buffers and data to be released without sending.</div>
<div style="font-family:Calibri,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
<br>
</div>
<div style="font-family:Calibri,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
lines 24 etc</div>
<div style="font-family:Calibri,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
<span>           DatagramSocket sock = recreateServerSocket(serverPort);<br>
</span>
<div>            b = "Greetings from the server".getBytes();<br>
</div>
<div>            packet = new DatagramPacket(b, b.length, addr, clientPort);<br>
</div>
<div>            sock.send(packet);</div>
<span>            sock.close();</span><br>
</div>
<div style="font-family:Calibri,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
<span><br>
</span></div>
<div style="font-family:Calibri,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
<span>placing a small delay before the close appears to allow the send to take place</span></div>
<div style="font-family:Calibri,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
<span><span>           DatagramSocket sock = recreateServerSocket(serverPort);<br>
</span>
<div>            b = "Greetings from the server".getBytes();<br>
</div>
<div>            packet = new DatagramPacket(b, b.length, addr, clientPort);<br>
</div>
<div>            sock.send(packet);<br>
</div>
<div>            Thread.sleep(1000);<br>
</div>
<span>            sock.close();</span><br>
</span></div>
<div style="font-family:Calibri,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
<span><span><br>
</span></span></div>
<div style="font-family:Calibri,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
<span><br>
</span></div>
<div style="font-family:Calibri,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
<span><span>$ /cygdrive/c/JDK-INSTALLS/jdk-13/bin/java PortUnreachableTest<br>
</span>
<div>Attempting to recreate server socket with port: 58754<br>
</div>
<div>PortUnreachableTest.recreateServerSocket: returning socket == /XXX.XXX.0.211:58754 obtained at first attempt with no sleep<br>
</div>
<div>client received data packet Greetings from the server<br>
</div>
<div><br>
</div>
<div>msheppard@MSHEPPARD-PC /cygdrive/c/Users/Mark Sheppard/eclipse-workspace/AgentTester-FLIG-4026<br>
</div>
<div>$ java PortUnreachableTest<br>
</div>
<div>Attempting to recreate server socket with port: 55876<br>
</div>
<div>PortUnreachableTest.recreateServerSocket: returning socket == /XXX.XXX.0.211:55876 obtained at first attempt with no sleep<br>
</div>
<div>client received data packet Greetings from the server<br>
</div>
<span></span><br>
</span></div>
<div style="font-family:Calibri,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
<span>might be worth considering that as an addition</span></div>
<div style="font-family:Calibri,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
<span><br>
</span></div>
<div style="font-family:Calibri,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
<span>regards</span></div>
<div style="font-family:Calibri,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
Mark</div>
<div style="font-family:Calibri,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
<span><br>
</span></div>
<hr tabindex="-1" style="display:inline-block; width:98%">
<div id="divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" color="#000000" style="font-size:11pt"><b>From:</b> net-dev <net-dev-bounces@openjdk.java.net> on behalf of Daniel Fuchs <daniel.fuchs@oracle.com><br>
<b>Sent:</b> Wednesday 4 December 2019 16:10<br>
<b>To:</b> Julia Boes <julia.boes@oracle.com>; OpenJDK Network Dev list <net-dev@openjdk.java.net><br>
<b>Subject:</b> Re: RFR: 8232513: java/net/DatagramSocket/PortUnreachable.java still fails intermittently with BindException</font>
<div> </div>
</div>
<div class="BodyFragment"><font size="2"><span style="font-size:11pt">
<div class="PlainText">Hi Julia,<br>
<br>
Looks good to me - but is:<br>
   31  * @library /test/lib<br>
actually needed?<br>
<br>
best regards,<br>
<br>
-- daniel<br>
<br>
On 04/12/2019 15:40, Julia Boes wrote:<br>
> Hi,<br>
> <br>
> The test PortUnreachable closes a DatagramSocket and tries to rebind it <br>
> to the same port, this causes the test to fail rarely with a <br>
> BindException (I did 500 test runs and couldn't observe a failure). To <br>
> decrease the likelihood of this to happen, the fix increases the number <br>
> of bind retries and test repeats.<br>
> <br>
> Bug: <a href="https://bugs.openjdk.java.net/browse/JDK-8232513">https://bugs.openjdk.java.net/browse/JDK-8232513</a><br>
> <br>
> Webrev: <a href="http://cr.openjdk.java.net/~jboes/webrevs/8232513/webrev.00/">
http://cr.openjdk.java.net/~jboes/webrevs/8232513/webrev.00/</a><br>
> <br>
> Regards,<br>
> <br>
> Julia<br>
> <br>
<br>
</div>
</span></font></div>
</body>
</html>