diff --git a/libs/cloud/picloudserver.cpp b/libs/cloud/picloudserver.cpp index 2bef35f7..62e51410 100644 --- a/libs/cloud/picloudserver.cpp +++ b/libs/cloud/picloudserver.cpp @@ -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; } diff --git a/libs/main/io_devices/piethernet.cpp b/libs/main/io_devices/piethernet.cpp index 2867b069..21a2de34 100644 --- a/libs/main/io_devices/piethernet.cpp +++ b/libs/main/io_devices/piethernet.cpp @@ -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;