PIIODevice destructor fix

This commit is contained in:
2020-08-26 18:43:33 +03:00
parent 2a42d2a341
commit 2ef0ca6946
23 changed files with 62 additions and 35 deletions

View File

@@ -244,7 +244,7 @@ PIEthernet::PIEthernet(int sock_, PIString ip_port): PIIODevice("", ReadWrite) {
PIEthernet::~PIEthernet() {
//piCout << "~PIEthernet" << uint(this);
stop();
closeDevice();
close();
//piCoutObj << "~PIEthernet done";
}
@@ -566,7 +566,6 @@ 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_) {
@@ -663,9 +662,8 @@ 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;
@@ -674,10 +672,7 @@ int PIEthernet::readDevice(void * read_to, int max_size) {
piMSleep(10);
//piCout << "connected to" << path();
}
if (!connected_) {
closeSocket(sock);
return -1;
}
if (!connected_) return -1;
errorClear();
rs = ethRecv(sock, read_to, max_size);
//piCoutObj << "readed" << rs;
@@ -742,7 +737,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();
closeSocket(sock);
msleep(PIP_MIN_MSLEEP);
return -1;
}
//piCoutObj << "ok, write SingleTCP" << int(data) << max_size << "bytes ...";
@@ -776,19 +771,15 @@ 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_) {
closeSocket(sock);
return -1;
}
if (!connected_) return -1;
ret = ::send(sock, (const char *)data, max_size, 0);
if (ret < 0) {
connected_ = false;