PIEthernet reconnect
This commit is contained in:
@@ -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(ð, disconnected, [this](bool){opened_ = false;});
|
||||||
return true;
|
return true;
|
||||||
} else {
|
|
||||||
eth.close();
|
|
||||||
}
|
}
|
||||||
|
eth.close();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user