SocketException:errno = 0x44

时间:2012-05-18 02:06:27

标签: java sockets vxworks

当尝试在vxWorks系统上运行的VM中创建连接套接字时,我会间歇性地抛出相当奇怪的SocketException。我无法隔离导致异常发生的原因。在不修改任何外部因素的情况下,成功连接似乎是随机的。

这是堆栈跟踪的顶部(从它进入java.net的位置):

(0000069317) java.net.SocketException: errno2: 68, error: errno = 0x44 for fd: 38
(0000069323)    at java.net.PlainSocketImpl.socketConnect(Native Method)
(0000069326)    at java.net.PlainSocketImpl.doConnect(Unknown Source)
(0000069329)    at java.net.PlainSocketImpl.connectToAddress(Unknown Source)
(0000069366)    at java.net.PlainSocketImpl.connect(Unknown Source)
(0000069372)    at java.net.Socket.connect(Unknown Source)

抛出异常的块如下:

socket = new Socket();
socket.connect(addr, CONNECT_TIMEOUT);

其中addr是java.net.SocketAddress。

任何人都可以提供一些有关errno 0x44的信息吗?

1 个答案:

答案 0 :(得分:1)

vxWorks具有与Unix系统不同的errno代码编号。

在vxWorks中,errno 0x44(68)是EINPROGRESS。

EINPROGRESS可以通过以下例程设置:     aio_read(),aio_return(),aio_write()

EINPROGRESS通常不会出错。对于异步IO,它只是指示某些内容已启动,但尚未完成。

也许Java将68错误地转换为EADV。

尝试使用:

socket.connect(addr);

而不是

socket.connect(addr, CONNECT_TIMEOUT);

也许这足以避免AIO和EINPROGRESS。