Serviceを読んで理解し、同意したものとみなします。スタック・オーバーフローはプログラマーとプログラミングに熱心な人のためのQ&Aサイトです。467件0Arduino特有の問題というより、TCP/IPを詳しく知らないため、対策が頭打ちです。イーサシールドに互換のある、W5100やenc28j60といったボードを使っているのですが、時折、通信に不具合が起きるらしく、不具合へ対応するコードが書けずにいます。対策として、watchdogで再起動するのですが、どうも、失敗があります。原因は、ルータのクライアント一覧にあるとだめらしく、5分ほど置いてから再起動すると大丈夫なのです。通常、成功するまで再起動を続けるので、例えば、ルータ側に問題が生じても、おおむね復旧しますが、駄目な場合があり、現地対応するのですが、Arduinoの電源再投入では復旧しません。バッファロールータに光回線とよくある構成でインターネットへ接続するのですが、ルータの管理画面にて、クライアント一覧に名前がある間、再接続を受付けません。5分ほど待つと一覧から消えるらしく、何もなかったかのようにすんなりつながりますが、キャッシュを上書きしたり、キャッシュの有効期限を短くするなりの方法がないかなと。自身の経験として、有線接続でも、Windows端末は、OS上で接続を切断、再度、接続すれば、すぐ通信できます。TCP/IPの正しい切断手順が守られず、再接続時に失敗しているようです。Arduino上で再現するには、何から勉強したら良いのか、どなたか、ヒントを教えて下さる方があればと質問します。リセット操作をスケッチで行うなどの方法がないでしょうか。した事を具体的に書かないと回答することが出来ないと思います。6:09お礼が遅くなりました。雲をつかむような質問でごめんなさい。本文をもう少し具体的な表現へ改めたものの、どう伝えたら良いのか、分かっておりません。httpでgetを投げられたら成功と判断していました。票0TCP/IPの同一ポートへのbind()が失敗しているという事を想定して回答します。アクティブクローズ(自身が先にclose)からのTIME_WAITによる2MLの影響で120秒の間、同一ポートにbind()するする事が出来ません。これに対する対策として、SO_REUSEADDRオプションを使用すれば同一ポートでbind()する事が出来ます。簡単に言うと120秒間また無くてもbind()が成功します。一つの対策として、bind()で指定するポート番号を「0番」で指定するとTCPプロトコル側でランダムなポートを設定してくれます。TIME_WAIT状態のポートを避けることが出来るのでbind()が失敗しなくなります。0番ポートにbind()する必要はないので下記の手順で接続できるようになるのではないかと思います。個の銅バッジありがとうございます。考えられる原因の指摘、嬉しいです。TCP/IPの仕様は分からないのですが、手順が分かれば、対処できることも増えると思っています。今回の指摘を参考に、少しずつ答えを探します。求めていた答えを得られた印象ですが、arduinoで実現させる方法はいまから勉強していきます・・・。8:44指摘に近いことが触れてある印象です。disconnect(_sock);と書いてある箇所は、見つからず。EthernetClient.cppがないので、周辺も見てみたものの、また、分かったことがあれば、報告します。|回答スタック・オーバーフローに参加してくれて、ありがとうございます!質問の回答を共有してください。回答を説明し、自分の検討結果も共有してください。意見を述べること(意見を述べるなら、参照リソース、自分の経験で意見をサポートしてください)さらにサポートが必要な場合このヘルプを参考してください。“回答を投稿”をクリックすることで利用規約、プライバシーポリシー、及びクッキーポリシーに同意したものとみなされます。タグが付いた他の質問を参照するか、自分で質問をする。公開5周年をお祝いしましょう!🌸コメントで回答する理由を教えてください関連する質問1ArduinoのWebClientの例でEthernet.begin(mac)で固まる。質問のフィードこのRSSフィードを購読するには、このURLをコピーしてRSSリーダーに貼り付けてください。