Warning message

This translation is outdated. For the most up-to-date information, please refer to the English version.

エラーコード EADDRNOTAVAIL で connect() コールが失敗する

Solution Verified - Updated -

Issue

  • アサインポートのソケットが TIME_WAIT で開いたままの場合に、ポートアドレスが 0 の bind() システムコールで SO_REUSEADDR を用いると、connect() システムコールが EADDRNOTAVAIL になります。
  • マルチホーミングのサーバーを用いている場合、ソース IP アドレスを指定するために、connect() を発行する前に bind() システムコールを使う必要があります。connect() を呼び出した際に EADDRNOTAVAIL になります。
  • bind() で自動的に割り当てられた一時ポートの使用は、connect() を発行する際に EADDRNOTAVAIL エラーになります。
  • カーネル 2.6.32-279.2.1 または 2.6.18-348 で、connect() コールが EADDRNOTAVAIL のエラーコードで失敗したのはなぜですか?
  • connect() コールを用いたアプリケーションが、EADDRNOTAVAIL [99] のエラーコードで失敗します。
  • アプリケーションやエラー発生時にアプリケーションに実行した strace から、"Cannot assign requested address" のエラーメッセージの表示が見えます。
  • ローカルアドレスの一時ポートへのアプリケーションバインドと特定ポートのリモートノードへの接続の生成で生じます。いくつかのソケットが開かれ、バインドが成功して接続した後、これ以上の connect コールは EADDRNOTAVAIL で失敗します。これは不定期に発生します。アプリケーションは多くの接続が可能な場合もありますが、すぐに失敗する場合もあります。このアプリケーションの場合、クライアント側で SO_REUSEADDR ソケットオプションが設定されています。

Environment

  • Red Hat Enterprise Linux 6.3
  • Red Hat Enterprise Linux 6.4
  • Kernel: 2.6.32-279.2.1.el6
  • Red Hat Enterprise Linux 5.9
  • Kernel: 2.6.18-348.el5

Subscriber exclusive content

A Red Hat subscription provides unlimited access to our knowledgebase of over 48,000 articles and solutions.

Current Customers and Partners

Log in for full access

Log In
Close

Welcome! Check out the Getting Started with Red Hat page for quick tours and guides for common tasks.