Ethernet Libraryを使ってHTTPでサーバに接続するプログラムを作ったのだけど
EthernetClientのstop関数を呼ぶとログに** B0100000063f694が出て動作が停止する
ググルとこんなのあるけど同じことしても解消しなかった
Ethernet Library: sketch crashes when remote cl... | Intel Communities
このファイルの\arduino-1.5.3\hardware\arduino\x86\libraries\Ethernet\EthernetClient.cpp
stop関数のソース見てたら_inactive_counterにアクセスしているあたりで
エラーが出ている。
void EthernetClient::stop() { if (_sock < 0) return; connect_true = false; if (_inactive_counter != NULL) *_inactive_counter = 0; if(_sock != -1){ close(_sock); _sock = -1; // Sketches do a Ethernet client = server.available() - which means a copy constructor is used // Hence any server which populated a pclients[idx] - won't actually see the socket closed - since // his client was copied - not given a pointer to.... pcleint[] in EthernetServer.cpp _sock != -1 at this point // make it so ! if(_pCloseServer != NULL){ _pCloseServer->closeNotify(this->id); } } }
よく見ると_inactive_counterが初期されてないように見えるので、
とりあえずコンストラクタでNULLにしてみたらエラーが出なくなった
EthernetServer.cpp
for(int sock = 0; sock < MAX_SOCK_NUM && success == 0; sock++){ if (pclients[sock]._sock == -1){ pclients[sock]._sock = ret; pclients[sock]._pCloseServer = this; pclients[sock].connect_true = true; pclients[sock]._inactive_counter = &_pcli_inactivity_counter[sock]; success = 1; } }
EthernetServerから使われるときはポインタに値が入るみたいだ
これでいいのかな...