dポイントプレゼントキャンペーン実施中!

ポートを占有している状態で、そのポートを使用しているアプリケーションを強制終了したらそのポートはどうなるのでしょうか?

もう一度そのアプリケーションを立ち上げたときに
ポートは占有されているyといったエラーは起きませんでしょうか?

またおきるならば、その対策についてもご教授くださいませ

A 回答 (3件)

ある特定のポートでlistenしているプログラムを強制終了してもう一度プログラムを起動するとbindが失敗して同じポートを利用できないという状態は発生する場合があります。



これは、TCPの仕様とプログラムの書き方により発生します。TCPでは接続を切るとTIME_WAIT状態というものになる事があります。TIME_WAIT状態はアプリケーションを強制終了した後も少しの間残ります。TIME_WAIT状態のTCPセッションが残った状態でもう一度bindしようとするとbindは失敗します。

この問題に対処するには、TCPソケットに対してsetsockoptを利用してSO_REUSEADDRオプションを有効にすれば回避できます。

さらに詳しくは[TIME_WAIT]や[SO_REUSEADDR]などで検索をしてみることをお勧めいたします。
    • good
    • 0

こんにちは。



手順を踏まないで終了させた場合は、タイミングによってはエラる場合もあるでしょうけど、その場合でも、OSがちゃんと処理しますね。トラブルまでには至らないと思います。試してみればわかりますよ。
    • good
    • 0

OSとアプリケーション次第です。



アプリケーションが使用するリソースを完全に制御できるOSであれば、アプリケーションを強制終了するとそれまでアプリケーションが使用していたリソースはすべて自動的に開放されます。そうではない場合、アプリケーションが使用していたリソースの一部あるいは全部が開放されない可能性があります。

後者の場合、その対策はこれまたアプリケーションとOS次第です。

他のアプリケーションが使用しているリソースを強制的に開放する方法が提供されていれば、その方法を使ってリソースの開放ができます。そのような方法がなければ、OS自体に備わった「アプリケーションの仕様リソースを強制的に開放する」機能を使うことになります。OSにもそのような機能がない場合、どうしようもありません。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!