Translated message

A translation of this page exists in English.

エラーコード 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, tools, and much more.

Current Customers and Partners

Log in for full access

Log In

New to Red Hat?

Learn more about Red Hat subscriptions

Using a Red Hat product through a public cloud?

How to access this content