summaryrefslogtreecommitdiffstats
path: root/CAN-binder/low-can-binding/binding/low-can-cb.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'CAN-binder/low-can-binding/binding/low-can-cb.cpp')
-rw-r--r--CAN-binder/low-can-binding/binding/low-can-cb.cpp13
1 files changed, 10 insertions, 3 deletions
diff --git a/CAN-binder/low-can-binding/binding/low-can-cb.cpp b/CAN-binder/low-can-binding/binding/low-can-cb.cpp
index 414fa910..21838936 100644
--- a/CAN-binder/low-can-binding/binding/low-can-cb.cpp
+++ b/CAN-binder/low-can-binding/binding/low-can-cb.cpp
@@ -55,9 +55,16 @@ void on_no_clients(std::string message)
int read(sd_event_source *s, int fd, uint32_t revents, void *userdata)
{
can_signal_t* sig= (can_signal_t*)userdata;
- if(sig->read_socket() != can_message_format_t::ERROR)
- return 0;
- return -1;
+ sig->read_socket();
+
+ /* check if error or hangup */
+ if ((revents & (EPOLLERR|EPOLLRDHUP|EPOLLHUP)) != 0)
+ {
+ sd_event_source_unref(s);
+ sig->get_socket().close();
+ sig->create_rx_filter();
+ }
+ return 0;
}
///******************************************************************************