United StatesChange Country, Oracle Worldwide Web Sites Communities I am a... I want to...
Bug ID: JDK-6896219 (fc) FileChannel.transferTo to DatagramChannel fails with "Operation not supported" (sol)
JDK-6896219 : (fc) FileChannel.transferTo to DatagramChannel fails with "Operation not supported" (sol)

Details
Type:
Bug
Submit Date:
2009-10-29
Status:
Closed
Updated Date:
2011-02-16
Project Name:
JDK
Resolved Date:
2010-02-16
Component:
core-libs
OS:
linux,solaris_10
Sub-Component:
java.nio
CPU:
x86,sparc
Priority:
P3
Resolution:
Fixed
Affected Versions:
1.4.2_20
Fixed Versions:
1.4.2_25-rev (b04)

Related Reports
Backport:
Backport:
Duplicate:
Relates:
Relates:

Sub Tasks

Description
When user sets DatagramChannel to  3rd arg. of transferTo(),
IOException occurs.

CONFIGURATION:
OS : Solaris 10
JDK : 1.4.2_20

REPRODUCE:

1. Compile the attached  transferToDatagram.java
2. Invoke java  transferToDatagram <org file> <target file> as follows.
 Then you can see an IOException as follows.

goedel[50]% java transferToDatagram from to
transferTo : pos=0, len=1708, pos+len=1708
Client
java.io.IOException: Operation not supported on transport endpoint
        at sun.nio.ch.FileChannelImpl.transferTo0(Native Method)
        at sun.nio.ch.FileChannelImpl.transferToDirectly(FileChannelImpl.java:39
2)
        at sun.nio.ch.FileChannelImpl.transferTo(FileChannelImpl.java:487)
        at transferToDatagram.main(transferToDatagram.java:57)
goedel[51]%

                                    

Comments
EVALUATION

This bug is applicable to jdk6 and older releases. At least for jdk6, the issue is that sendfile may fail with -1/EOPNOTSUPP and this error is not handled. In jdk7 this error is handled so that the fallback/slow-path is used.
                                     
2009-10-29
SUGGESTED FIX

At least for jdk6, this is trivially fixed with this patch from jdk7:

--- a/src/solaris/native/sun/nio/ch/FileChannelImpl.c   Sun Feb 15 12:25:54 2009 +0000
+++ b/src/solaris/native/sun/nio/ch/FileChannelImpl.c   Mon Apr 06 08:59:33 2009 +0100
@@ -231,6 +231,8 @@ Java_sun_nio_ch_FileChannelImpl_transfer
         if (result < 0) {
             if (errno == EAGAIN)
                 return IOS_UNAVAILABLE;
+            if (errno == EOPNOTSUPP)
+                return IOS_UNSUPPORTED_CASE;
             if ((errno == EINVAL) && ((ssize_t)count >= 0))
                 return IOS_UNSUPPORTED_CASE;
             if (errno == EINTR)
                                     
2009-10-29



Hardware and Software, Engineered to Work Together