PIEthernet atomic connected exchange
This commit is contained in:
@@ -763,8 +763,7 @@ ssize_t PIEthernet::readDevice(void * read_to, ssize_t max_size) {
|
|||||||
//piCoutObj << errorString();
|
//piCoutObj << errorString();
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
if (connected_) {
|
if (connected_.exchange(false)) {
|
||||||
connected_ = false;
|
|
||||||
opened_ = false;
|
opened_ = false;
|
||||||
piCoutObj << "Disconnect on read," << ethErrorString();
|
piCoutObj << "Disconnect on read," << ethErrorString();
|
||||||
closeSocket(sock);
|
closeSocket(sock);
|
||||||
@@ -856,13 +855,13 @@ ssize_t PIEthernet::writeDevice(const void * data, ssize_t max_size) {
|
|||||||
}
|
}
|
||||||
if (!connected_) return -1;
|
if (!connected_) return -1;
|
||||||
auto disconnectFunc = [this](){
|
auto disconnectFunc = [this](){
|
||||||
if (!connected_) return;
|
if (connected_.exchange(false)) {
|
||||||
connected_ = false;
|
opened_ = false;
|
||||||
opened_ = false;
|
piCoutObj << "Disconnect on write," << ethErrorString();
|
||||||
piCoutObj << "Disconnect on write," << ethErrorString();
|
closeSocket(sock);
|
||||||
closeSocket(sock);
|
init();
|
||||||
init();
|
disconnected(true);
|
||||||
disconnected(true);
|
}
|
||||||
};
|
};
|
||||||
if (!isOptionSet(BlockingWrite)) {
|
if (!isOptionSet(BlockingWrite)) {
|
||||||
ret = ::send(sock, (const char *)data, max_size, 0);
|
ret = ::send(sock, (const char *)data, max_size, 0);
|
||||||
|
|||||||
Reference in New Issue
Block a user