Correctly reregister serial port on failure-reconnect cycle
This commit is contained in:
@ -14,7 +14,6 @@ private:
|
|||||||
CommunicatingSocket *_socket;
|
CommunicatingSocket *_socket;
|
||||||
bool _disconnected = false;
|
bool _disconnected = false;
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
void cleanUp();
|
void cleanUp();
|
||||||
|
26
main.cpp
26
main.cpp
@ -177,7 +177,9 @@ int main(int argc, char* argv[])
|
|||||||
if(!config.noSerial)
|
if(!config.noSerial)
|
||||||
{
|
{
|
||||||
if(serial == -1)
|
if(serial == -1)
|
||||||
|
{
|
||||||
return 1;
|
return 1;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
struct epoll_event ev = {};
|
struct epoll_event ev = {};
|
||||||
@ -236,7 +238,17 @@ int main(int argc, char* argv[])
|
|||||||
catch(serialIoException& ex)
|
catch(serialIoException& ex)
|
||||||
{
|
{
|
||||||
close(serial);
|
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())
|
if((ev.events & (EPOLLHUP | EPOLLERR)) || client->isDisconnected())
|
||||||
@ -254,7 +266,17 @@ int main(int argc, char* argv[])
|
|||||||
if(readlen < 0 && (errno != EAGAIN || errno != EWOULDBLOCK))
|
if(readlen < 0 && (errno != EAGAIN || errno != EWOULDBLOCK))
|
||||||
{
|
{
|
||||||
close(serial);
|
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)
|
if(config.verbose)
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user