0

I am trying to convert some python code to java, I noticed that python socket api is so basic that we can handle some system errorno like

import socket
import errno

socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.setblocking(0)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)

errd = ( errno.EINPROGRESS, errno.EALREADY, errno.EWOULDBLOCK )
conn = ( errno.EISCONN, 10057, 10053 )

# test connection?
try:
    sock.recv(0)
except socket.error, (code, strerror):
    if code in conn:
       # ...
    if code in errd:
       # ...

# try receive?
rdata = ''
while 1:
    text = ''
    try:
        text = sock.recv(1024)
        if not text:
            self.errc = 10000
            sock.close()
            # ...
    except socket.error,(code, strerror):
        if not code in errd:
            sock.close()
            # ...
    if text == '':
        break
    rdata = rdata + text
    

but in java, when I use socketChannel.read(ByteBuffer.allocate(0)), I have no idea of what happens in operating system and which errorno has been throwed, then I can't handle them like python code above. It seems to I have to figure out each IOException's subclass corresponding to each errno, and maybe it is not correct to use jnr-enxio Native.getLastError() function here.

RTM
  • 163
  • 1
  • 9

0 Answers0