Python スクリプトで単純な HTTP リダイレクト サーバーに対してストレス テストを行っています。スクリプトは、ノンブロッキング ソケットを使用して epoll (エッジ トリガー モード) でセットアップされます。しかし、私はよくわからないことを観察しました。
1) connect() の処理中に epoll が ECONNREFUSED と ETIMEOUT errno の両方を取得する可能性があります。どちらもリモートサーバーが接続を受け入れられないことを示していませんか? それらはどのように異なりますか、クライアントはどのように違いを伝えますか?
2) EPOLLIN が epoll によって通知されると、socket.recv() は例外がスローされることなく (または C では errno) 空の文字列を返すことがあります。例外やエラーを取得することなくソケットを読み続けることができ、常に空の文字列を返します。何故ですか?
ありがとう、