Correctly reregister serial port on failure-reconnect cycle

This commit is contained in:
uvos 2024-08-08 21:09:23 +02:00
parent 56d5798cb1
commit 15fe1a928a
2 changed files with 24 additions and 3 deletions

View File

@ -14,7 +14,6 @@ private:
CommunicatingSocket *_socket;
bool _disconnected = false;
public:
void cleanUp();

View File

@ -177,7 +177,9 @@ int main(int argc, char* argv[])
if(!config.noSerial)
{
if(serial == -1)
{
return 1;
}
else
{
struct epoll_event ev = {};
@ -236,7 +238,17 @@ int main(int argc, char* argv[])
catch(serialIoException& ex)
{
close(serial);
serialPortReconnect(config, ex.what());
serial = serialPortReconnect(config, ex.what());
if(serial < 0)
{
std::cerr<<"Serial port connection has failed with: "<<strerror(errno)<<'\n';
return 2;
}
struct epoll_event ev = {};
ev.events = EPOLLIN;
ev.data.fd = -1;
epoll_ctl(pollQue, EPOLL_CTL_ADD, serial, &ev);
}
}
if((ev.events & (EPOLLHUP | EPOLLERR)) || client->isDisconnected())
@ -254,7 +266,17 @@ int main(int argc, char* argv[])
if(readlen < 0 && (errno != EAGAIN || errno != EWOULDBLOCK))
{
close(serial);
serialPortReconnect(config, strerror(errno));
serial = serialPortReconnect(config, strerror(errno));
if(serial < 0)
{
std::cerr<<"Serial port connection has failed with: "<<strerror(errno)<<'\n';
return 2;
}
struct epoll_event ev = {};
ev.events = EPOLLIN;
ev.data.fd = -1;
epoll_ctl(pollQue, EPOLL_CTL_ADD, serial, &ev);
}
if(config.verbose)
{