STREAM unix ドメイン ソケットのリッスン バックログがいっぱいにconnect(2)
なると、ほとんどのシステムで ECONNREFUSED で失敗します。EAGAIN を返すことが望ましいでしょう。
その理由は、デッド ソケットの 2 つのケース (ファイル システムにノードが存在するが、リッスンしているプロセスがない) と完全なバックログのケースを区別できると非常に便利だからです。デッド ソケットをクリーンアップするコードを含む Linux ソフトウェアを移植するときにこの問題に遭遇しましたが、ソケットをスパミングしてバックログを埋めることでコードを騙してソケットを削除できる場合、セキュリティ上の脆弱性があります。
Linux のみが EAGAIN を返します。AIX、Solaris、および Darwin は BSD の動作に従います (それぞれでテスト済み)。
POSIX では、connect() (リンク)からの戻りコードとして EAGAIN がリストされていないため、ここでコンプライアンスの問題が発生する可能性があります。
全員を Linux に合わせて変更するための最善の方法は何ですか? 私は、Oracle、Apple、FreeBSD PR にバグ レポートを提出し、各組織のメーリング リストで争うことができました。それとも、標準化団体 (Austin グループ) の誰かをせがむ必要がありますか? 利点は明らかですが、ここで全員に着替えさせることをお勧めしますか?