2

vxWorksシステムで実行されているVMに接続ソケットを作成しようとすると、かなり奇妙なSocketExceptionが断続的にスローされます。例外が発生する原因を特定できませんでした。外部要因を変更しなくても、接続の成功は一見ランダムに見えます。

スタックトレースの最上位(java.netに入るところから)は次のとおりです。

(0000069317)java.net.SocketException:errno2:68、エラー:errno = 0x44 for fd:38
(0000069323)java.net.PlainSocketImpl.socketConnect(ネイティブメソッド)
(0000069326)java.net.PlainSocketImpl.doConnect(不明なソース)
(0000069329)java.net.PlainSocketImpl.connectToAddress(不明なソース)
(0000069366)java.net.PlainSocketImpl.connect(不明なソース)
(0000069372)java.net.Socket.connect(不明なソース)

例外をスローするブロックは次のとおりです。

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

addrjava.net.SocketAddressはどこにありますか。

誰かがerrno0x44が何であるかについての洞察を提供できますか?

4

1 に答える 1

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を避ける​​のに十分です。

于 2012-05-18T07:30:43.033 に答える