PIEthernet reconnect
This commit is contained in:
@@ -33,10 +33,10 @@ bool PICloudServer::openDevice() {
|
||||
piCout << "PICloudServer open device" << path();
|
||||
bool op = eth.connect(path(), false);
|
||||
if (op) {
|
||||
// CONNECTL(ð, disconnected, [this](bool){opened_ = false;});
|
||||
return true;
|
||||
} else {
|
||||
eth.close();
|
||||
}
|
||||
eth.close();
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user