[解決済み] ソケットを接続しようとするとECONNABORTEDが表示されますが、どういう意味ですか?
質問
ubuntuマシンでpython2.7を使用しています。
クライアントがサーバーに接続しようとします。 ノンブロッキングソケットで期待されるEINPROGRESSが表示されます。
接続に成功したかどうかを確認するために、{connect}のマニュアルページが示唆することを実行します。
# EINPROGRESS The socket is nonblocking and the connection cannot be
# completed immediately. It is possible to select(2) or poll(2) for
# completion by selecting the socket for writing. After select(2)
# indicates writability, use getsockopt(2) to read the SO_ERROR option at
# level SOL_SOCKET to determine whether connect() completed successfully
# (SO_ERROR is zero) or unsuccessfully (SO_ERROR is one of the usual error
# codes listed here, explaining the reason for the failure)
サーバーがオフラインの場合、これでECONNREFUSEDが出ました。 ここまでは順調です。
接続に失敗したとき、何度か再試行したい。
問題点 2回目に同じソケットに接続しようとすると、{connect}からECONNABORTEDが送信されます。 これは{connect}のマニュアルページにはありません。 これはどういう意味ですか?
解決方法は?
ECONNABORTED
は、Linux Kernel Source Socket Codeの2箇所に設定されています。
のように
errno
マンページと
/include/asm-generic/errno.h
#define ECONNABORTED 103 /* Software caused connection abort */
は
第一
は、システムコールを定義する関数にあります。
accept4
で
/net/socket.c
.
関連するソースコード
1533 if (upeer_sockaddr) {
1534 if (newsock->ops->getname(newsock, (struct sockaddr *)&address,
1535 &len, 2) < 0) {
1536 err = -ECONNABORTED;
1537 goto out_fd;
1538 }
1539 err = move_addr_to_user((struct sockaddr *)&address,
1540 len, upeer_sockaddr, upeer_addrlen);
1541 if (err < 0)
1542 goto out_fd;
1543 }
関連するロジックの説明は以下の通りです。
ユーザ空間からの対向ソケットのアドレスが定義されている場合
そして、新しいソケットが名前を持っていない場合、エラー状態を
ECONNABORTED
というラベルが表示されます。
out_fd
.
は
セカンド
は、シンボルを定義する関数にある
inet_stream_connect
で
/net/ipv4/af_inet.c
.
関連するソースコード
645 /* Connection was closed by RST, timeout, ICMP error
646 * or another process disconnected us.
647 */
648 if (sk->sk_state == TCP_CLOSE)
649 goto sock_error;
662 sock_error:
663 err = sock_error(sk) ? : -ECONNABORTED;
664 sock->state = SS_UNCONNECTED;
665 if (sk->sk_prot->disconnect(sk, flags))
666 sock->state = SS_DISCONNECTING;
667 goto out;
関連するロジックの説明は以下の通りです。
へのgotoを持つ唯一のコードです。
sock_error
のラベルを
inet_stream_connect
は、ソケットがRST、タイムアウト、他のプロセス、またはエラーによって閉じられたかどうかを確認するためのチェックです。
には
sock_error
ラベル
ソケットエラーレポートを回復できる場合はそうし、そうでない場合はエラー状態から
ECONNABORTED
のように セラーダ のコメントにあるように、私も毎回新しいソケットを開くことをお勧めします。
関連
-
ピローによる動的キャプチャ認識のためのPythonサンプルコード
-
Python関数の高度な応用を解説
-
Python機械学習Githubが8.9Kstarsに達したモデルインタープリタLIME
-
Python百行で韓服サークルの画像クロールを実現する
-
[解決済み】Python - "ValueError: not enough values to unpack (expected 2, got 1)" の修正方法 [閉店].
-
[解決済み】cアンダースコア式`c_`は、具体的に何をするのですか?
-
[解決済み] パラメータに**(ダブルスター/アスタリスク)、*(スター/アスタリスク)がありますが、これはどういう意味ですか?
-
[解決済み] コネクション・リセット・バイ・ピア」とはどういう意味ですか?
-
[解決済み] Pythonの関数定義における->の意味とは?
-
[解決済み】if __name__ == "__main__": は何をするのでしょうか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
pythonを使ったオフィス自動化コード例
-
python call matlab メソッドの詳細
-
Python Decorator 練習問題
-
PythonはWordの読み書きの変更操作を実装している
-
Pythonによるjieba分割ライブラリ
-
Python LeNetネットワークの説明とpytorchでの実装
-
Python Pillow Image.save jpg画像圧縮問題
-
Pythonの画像ファイル処理用ライブラリ「Pillow」(グラフィックの詳細)
-
[解決済み】numpyの配列連結。"ValueError:すべての入力配列は同じ次元数でなければならない"
-
[解決済み] 'int'オブジェクトに'__getitem__'属性がない。