Cente IPv6

TCPのハンドシェイクが完了しているにもかかわらずまれに着信に失敗する


発行番号: Cente001-0075
Rev: 第1版
発行日: 2025/01/31
題名: TCPのハンドシェイクが完了しているにもかかわらずまれに着信に失敗する

適用製品
・Cente TCP/IPv4 Ver.1.51およびそれ以前
・Cente TCP/IPv4 SNMPv2 Ver.2.30およびそれ以前
・Cente TCP/IPv4 SNMPv3 Ver.2.30およびそれ以前
・Cente IPv6 Ver.1.60およびそれ以前
・Cente IPv6 SNMPv2 Ver.2.30およびそれ以前
・Cente IPv6 SNMPv3 Ver.2.30およびそれ以前

【該当するユーザ環境】
接続要求待ち関数tcp_acp_cep()、tcp_acp_cep_ip46()をタイムアウト指定で使用しているユーザ。
・製品に同梱されているSSHdのサンプルプログラムは該当します。
・タイムアウトなし(TMO_FEVRを指定)で使用している場合は非該当です。
・BSDソケットAPIのTCP接続受け付け関数ctaccept()は非該当です。

【詳細】
通常、接続要求待ち関数を呼んだ状態で通信相手からの接続を受けるとハンドシェイクが完了した時点で関数から返ります。また、タイムアウトを指定してその時間までに通信相手からの接続を受信しなかった場合はタイムアウトエラーで関数から返ります。
しかし、上記適用製品では通信相手からの接続と関数のタイムアウトが同時に発生した場合、まれに通信相手に対してはハンドシェイク完了(接続成功)となり、関数からはタイムアウトエラーで返る、という不正な状態となっていました。
この状態では、通信相手は接続が完了してデータ通信をしようとしても、こちら側は接続状態となっていないため通信ができない状態となります。

【回避方法】
ソースコードの改変が必要です。
修正箇所については、support_XXXatmarkXXX_cente.jpまでお問い合わせください(XXXatmarkXXXは@にしてください)。

以上。