PIEthernet fix: no more close outdated fd on disconnect (error at work with MHD)
This commit is contained in:
@@ -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();
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user