PIEthernet fix: no more close outdated fd on disconnect (error at work with MHD)

This commit is contained in:
2026-08-17 20:26:36 +03:00
parent aed98059de
commit b1060fd572
2 changed files with 14 additions and 10 deletions
+13 -10
View File
@@ -214,9 +214,7 @@ void PIEthernet::init() {
if (sock != -1) return;
// piCout << "init " << type();
PRIVATE->event.destroy();
if (sock_s == sock) sock_s = -1;
closeSocket(sock);
closeSocket(sock_s);
closeSockets();
int st = 0, pr = 0;
if (type() == UDP) {
st = SOCK_DGRAM;
@@ -356,6 +354,13 @@ void PIEthernet::closeSocket(int & sd) {
}
void PIEthernet::closeSockets() {
if (sock_s == sock) sock_s = -1;
closeSocket(sock);
closeSocket(sock_s);
}
void PIEthernet::applyTimeouts() {
if (sock < 0) return;
PISystemTime rtm = readTimeout(), wtm = writeTimeout();
@@ -383,7 +388,7 @@ void PIEthernet::applyBuffers() {
void PIEthernet::applyTimeout(int fd, int opt, PISystemTime tm) {
if (fd == 0) return;
// piCoutObj << "setReadIsBlocking" << yes;
// piCoutObj << "setReadIsBlocking" << yes;
#ifdef WINDOWS
DWORD _tm = tm.toMilliseconds();
#else
@@ -577,9 +582,7 @@ void PIEthernet::stopThreadedListen() {
if (!server_thread_.waitForFinish(1_s)) server_thread_.terminate();
}
PRIVATE->event.destroy();
if (sock_s == sock) sock_s = -1;
closeSocket(sock);
closeSocket(sock_s);
closeSockets();
}
@@ -736,7 +739,7 @@ ssize_t PIEthernet::readDevice(void * read_to, ssize_t max_size) {
if (connected_.exchange(false)) {
opened_ = false;
// piCoutObj << "Disconnect on read," << ethErrorString();
closeSocket(sock);
closeSockets();
init();
disconnected(rs < 0);
}
@@ -831,7 +834,7 @@ ssize_t PIEthernet::writeDevice(const void * data, ssize_t max_size) {
if (connected_.exchange(false)) {
opened_ = false;
// piCoutObj << "Disconnect on write," << ethErrorString();
closeSocket(sock);
closeSockets();
init();
disconnected(true);
if (params[KeepConnection]) {
@@ -988,7 +991,7 @@ bool PIEthernet::connectTCP() {
if (ethIsWriteable(sock))
return true;
else {
closeSocket(sock);
closeSockets();
init();
}
}
+1
View File
@@ -653,6 +653,7 @@ protected:
bool openDevice() override;
bool closeDevice() override;
void closeSocket(int & sd);
void closeSockets();
void applyTimeouts();
void applyBuffers();
void applyTimeout(int fd, int opt, PISystemTime tm);