Open Nobu19800 opened 2 years ago
予想した通り、Bidirectional通信では例外は発生しませんでした。
corba.args: -ORBinConScanPeriod 1 -ORBoutConScanPeriod 0 -ORBclientTransportRule "* bidir, tcp" -ORBacceptBiDirectionalGIOP 1 -ORBofferBiDirectionalGIOP 1
4749 4f50 0102 0105 0000 0000 GIOP........
omniORB: (2) 2022-04-11 15:15:03.029000: sendCloseConnection: to giop:tcp:[::ffff:192.168.135.1]:52751 12 bytes
omniORB: (2) 2022-04-11 15:15:03.030000:
4749 4f50 0102 0105 0000 0000 GIOP........
omniORB: (2) 2022-04-11 15:15:03.030000: Scan for idle connections done (1649657703,19000000).
omniORB: (5) 2022-04-11 15:15:03.030000: inputMessage: from giop:tcp:192.168.135.1:52739 12 bytes
omniORB: (5) 2022-04-11 15:15:03.030000:
4749 4f50 0102 0105 0000 0000 GIOP........
omniORB: (5) 2022-04-11 15:15:03.030000: Server has closed a bi-directional connection on strand 000001434B5B7C50. Will scavenge it.
omniORB: (5) 2022-04-11 15:15:03.030000: Orderly connection shutdown: giop:tcp:192.168.135.1:52739
omniORB: (5) 2022-04-11 15:15:03.030000: throw giopStream::CommFailure from giopImpl12.cc:1244(0,NO,COMM_FAILURE_UnMarshalArguments)
omniORB: (5) 2022-04-11 15:15:03.030000: Client connection giop:tcp:192.168.135.1:52739 refcount = 1
omniORB: (5) 2022-04-11 15:15:03.030000: AsyncInvoker: thread id 5 finished immediate server task.
omniORB: (6) 2022-04-11 15:15:03.130000: Error in network receive (start of message): giop:tcp:[::ffff:192.168.135.1]:52747
omniORB: (6) 2022-04-11 15:15:03.130000: throw giopStream::CommFailure from giopStream.cc:849(0,NO,COMM_FAILURE_UnMarshalArguments)
omniORB: (6) 2022-04-11 15:15:03.130000: Server connection giop:tcp:[::ffff:192.168.135.1]:52747 refcount = 1
omniORB: (6) 2022-04-11 15:15:03.130000: Server connection giop:tcp:[::ffff:192.168.135.1]:52747 refcount = 0
omniORB: (6) 2022-04-11 15:15:03.130000: Server close connection from giop:tcp:[::ffff:192.168.135.1]:52747
omniORB: (6) 2022-04-11 15:15:03.130000: AsyncInvoker: thread id 6 finished immediate server task.
Describe the bug omniORBは一定時間通信のないコネクションを自動的に削除する機能がある。
outConScanPeriod
:送信がない場合にコネクションを維持できる時間inConScanPeriod
:受信がない場合にコネクションを維持できる時間scanGranularity
:スキャンの周期コネクションが削除された場合、データポートやサービスポートのコネクタが削除される場合がある。 サーバー側でコネクションを削除すると、メソッド呼び出し時に
COMM_FAILURE_WaitingForReply
例外が発生する。まず、下のログを見ての通り、サーバー側で自動削除した時に
CloseConnection
を送信している。しかし、クライアント側で受信データを処理するのはメソッド呼び出しのためのリクエスト送信後にリプライを処理する時となる。ソケット通信の問題であるが、サーバー側でソケットを閉じた状態(closesocket関数)でクライアントがデータを送信(send関数)すると、クライアント側で受信したはずのCloseConnection
メッセージが消えるため、クライアント側ではリプライの受信(recv関数)に失敗したと判定してCOMM_FAILURE_WaitingForReply
例外が発生する。To Reproduce Steps to reproduce the behavior:
Reproducibility 100%
Expected behavior
Screenshots or Logs
Environment
Additional context