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();
bool op = eth.connect(path(), false);
if (op) {
// CONNECTL(&eth, disconnected, [this](bool){opened_ = false;});
return true;
} else {
eth.close();
}
eth.close();
return false;
}

View File

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