障害情報

HTTPScがキープアライブ動作中に再接続に失敗する現象について


発行番号: Cente010-0004
Rev: 第1版
発行日: 2020/12/21
題名: HTTPScがキープアライブ動作中に再接続に失敗する現象について

適用製品
・Cente HTTPd/c Ver.1.61

【該当するユーザ環境】
以下の関数をまとめて「httpc_XXX_with_sock()」と記述します。
– httpc_get_with_sock()
– httpc_post_with_sock()
– httpc_put_with_sock()
– httpc_delete_with_sock()

以下の条件をすべて満たした場合、httpc_XXX_with_sock()がエラーでリターンすることがあります。
– httpc_XXX_with_sock()で、HTTPキープアライブ有効かつka_retry=1として自動再接続を有効にして通信する。
– usessl=1としてSSL通信する。
– HTTPサーバがHTTPキープアライブタイムアウトでTCPを切断したあと、httpc_XXX_with_sock()で再接続が発生する。
自動再接続が無効の場合や、SSLを使用しない場合は、該当しません。

【障害内容】
HTTPは、TCP接続のオーバヘッドを減らすために、HTTPキープアライブ機能があります。Cente HTTPcは、httpc_XXX_with_sock()でHTTPキープアライブを使用できます。HTTPキープアライブ有効時でも、HTTPサーバは任意のタイムアウトでTCPを切断します。切断後のhttpc_XXX_with_sock()でka_retry=1として自動再接続を有効にしているとAPI内で再接続します。
再接続時には、API内で通信端点の削除と作成を行いますが、この通信端点のIDをSSL使用時に更新しておらず、以前のIDで通信してエラー(HTTPC_E_CON)になることがありました。
このエラーが発生した場合、httpc_disconnect()でHTTPcを切断して、再度httpc_XXX_with_sock()を呼び出す必要がありました。

【回避方法】
ミドルウェアのソースコードを修正し、通信端点のIDをSSLで正しく使用するようにします。
詳細については、営業担当またはsupport_XXXatmarkXXX_cente.jpまでお問い合わせください(_XXXatmarkXXX_は@にしてください)。