2012-05-18 3 views
2

При попытке создать сокет в виртуальной машине, запущенной в системе vxWorks, я получаю довольно странное исключение SocketException, которое прерывается. Я не смог изолировать то, что вызывает исключение. Без изменения каких-либо внешних факторов успешное соединение кажется случайным.SocketException: errno = 0x44

Вот вершина трассировки стека (от того, где он входит в 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

vxWorks имеют различную нумерацию кода errno, чем системы Unix.

В 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); 

Может быть, достаточно для ОАП и избегайте EINPROGRESS.

+0

Злой, приветствие информации. Когда я перешел на 'connect (SocketAddress)', он теперь выдает NoRouteToHostException с errno = 0x3c. –

+0

@ Ким Берджесс: Хорошо, может быть несколько причин «Нет маршрута к хосту»: неправильный целевой IP, сетевая маска интерфейса неверна .... – SKi

+0

Какая нечетная часть, так как она успешно разрешает 'addr' с хоста имя непосредственно перед попыткой соединения сокета. Устройство, на котором работает, может также подключить устройство, к которому подключается сокет. –