PIEthernet reconnect

This commit is contained in:
2020-08-26 18:01:17 +03:00
parent cfebf8cf23
commit 7f2c82dc69
2 changed files with 16 additions and 7 deletions

View File

@@ -33,10 +33,10 @@ bool PICloudServer::openDevice() {
piCout << "PICloudServer open device" << path(); piCout << "PICloudServer open device" << path();
bool op = eth.connect(path(), false); bool op = eth.connect(path(), false);
if (op) { if (op) {
// CONNECTL(&eth, disconnected, [this](bool){opened_ = false;});
return true; return true;
} else {
eth.close();
} }
eth.close();
return false; return false;
} }

View File

@@ -566,6 +566,7 @@ bool PIEthernet::connect(bool threaded) {
connected_ = (::connect(sock, (sockaddr * )&PRIVATE->addr_, sizeof(PRIVATE->addr_)) == 0); connected_ = (::connect(sock, (sockaddr * )&PRIVATE->addr_, sizeof(PRIVATE->addr_)) == 0);
if (!connected_) { if (!connected_) {
piCoutObj << "Can`t connect to" << addr_r << "," << ethErrorString(); piCoutObj << "Can`t connect to" << addr_r << "," << ethErrorString();
closeSocket(sock);
} }
opened_ = connected_; opened_ = connected_;
if (connected_) { if (connected_) {
@@ -662,8 +663,9 @@ int PIEthernet::readDevice(void * read_to, int max_size) {
//piCoutObj << "connect to " << ip_ << ":" << port_ << "..."; //piCoutObj << "connect to " << ip_ << ":" << port_ << "...";
connected_ = (::connect(sock, (sockaddr * )&(PRIVATE->addr_), sizeof(PRIVATE->addr_)) == 0); connected_ = (::connect(sock, (sockaddr * )&(PRIVATE->addr_), sizeof(PRIVATE->addr_)) == 0);
//piCoutObj << "connect to " << ip_ << ":" << port_ << connected_; //piCoutObj << "connect to " << ip_ << ":" << port_ << connected_;
if (!connected_) if (!connected_) {
piCoutObj << "Can`t connect to" << addr_r << "," << ethErrorString(); piCoutObj << "Can`t connect to" << addr_r << "," << ethErrorString();
}
opened_ = connected_; opened_ = connected_;
if (connected_) { if (connected_) {
connecting_ = false; connecting_ = false;
@@ -672,7 +674,10 @@ int PIEthernet::readDevice(void * read_to, int max_size) {
piMSleep(10); piMSleep(10);
//piCout << "connected to" << path(); //piCout << "connected to" << path();
} }
if (!connected_) return -1; if (!connected_) {
closeSocket(sock);
return -1;
}
errorClear(); errorClear();
rs = ethRecv(sock, read_to, max_size); rs = ethRecv(sock, read_to, max_size);
//piCoutObj << "readed" << rs; //piCoutObj << "readed" << rs;
@@ -737,7 +742,7 @@ int PIEthernet::writeDevice(const void * data, int max_size) {
//piCoutObj << "connect SingleTCP" << ip_s << ":" << port_s << "..."; //piCoutObj << "connect SingleTCP" << ip_s << ":" << port_s << "...";
if (::connect(sock, (sockaddr * )&PRIVATE->addr_, sizeof(PRIVATE->addr_)) != 0) { if (::connect(sock, (sockaddr * )&PRIVATE->addr_, sizeof(PRIVATE->addr_)) != 0) {
//piCoutObj << "Can`t connect to " << ip_s << ":" << port_s << ", " << ethErrorString(); //piCoutObj << "Can`t connect to " << ip_s << ":" << port_s << ", " << ethErrorString();
msleep(PIP_MIN_MSLEEP); closeSocket(sock);
return -1; return -1;
} }
//piCoutObj << "ok, write SingleTCP" << int(data) << max_size << "bytes ..."; //piCoutObj << "ok, write SingleTCP" << int(data) << max_size << "bytes ...";
@@ -771,15 +776,19 @@ int PIEthernet::writeDevice(const void * data, int max_size) {
#endif #endif
//piCoutObj << "connect to " << ip << ":" << port_; //piCoutObj << "connect to " << ip << ":" << port_;
connected_ = (::connect(sock, (sockaddr * )&PRIVATE->addr_, sizeof(PRIVATE->addr_)) == 0); connected_ = (::connect(sock, (sockaddr * )&PRIVATE->addr_, sizeof(PRIVATE->addr_)) == 0);
if (!connected_) if (!connected_) {
piCoutObj << "Can`t connect to" << addr_r << "," << ethErrorString(); piCoutObj << "Can`t connect to" << addr_r << "," << ethErrorString();
}
opened_ = connected_; opened_ = connected_;
if (connected_) { if (connected_) {
connecting_ = false; connecting_ = false;
connected(); connected();
} }
} }
if (!connected_) return -1; if (!connected_) {
closeSocket(sock);
return -1;
}
ret = ::send(sock, (const char *)data, max_size, 0); ret = ::send(sock, (const char *)data, max_size, 0);
if (ret < 0) { if (ret < 0) {
connected_ = false; connected_ = false;