バックグラウンド私は、IP経由でサードパーティのサーバと通信する組み込み機器を持っています。サードパーティのサーバーのコードは変更されません。最近のリリースでは、close()を呼び出す前にshutdown()を呼び出すようにip disconnect関数を変更しました(以前はclose()を呼び出していました)。特定の割り込みが発生すると、組み込みデバイスは通信セッションを完了せずに切断されます。これがセッションの間違った場所で発生すると、サーバーは現在、さまざまな理由で顧客に受け入れられないトレースファイルを生成しています。これは、シャットダウンが呼び出されたときにのみ発生し、サーバはこれを送信失敗エラーとして扱い(トレースファイルを生成します)、トレースを必要としない別の終了切断エラーとして扱います。バークレーソケットのシャットダウン機能は、どれくらい重要ですか?
したがって明らかな解決方法は、シャットダウンの呼び出しを停止することです。このquestionのBarnes氏の答えは、2つの機能の説明をよくしていますが、特定のソケットに1つのプロセスだけが接続されていることがわかっている場合、閉じる前にシャットダウンを使用する理由はありますか?
おかげで、 パトリック
埋め込みデバイスとサードパーティのサーバでは、どのTCPスタックを使用していますか?すべてのTCPスタックが同じ動作をするわけではありませんw.r.t. 'シャットダウン'対 'クローズ'。また、 'SO_LINGER'オプションを設定していますか? –
どのようにtcpスタックを特定しますか?私たちは最後にSO_LINGERを使用します。 – Patrick
まず、どのオペレーティングシステム(またはライブラリ)とバージョンが関係しているかをお知らせください。 –