diff --git a/socketCAN/CO_epoll_interface.c b/socketCAN/CO_epoll_interface.c index 4a6e5d6..3f1a771 100644 --- a/socketCAN/CO_epoll_interface.c +++ b/socketCAN/CO_epoll_interface.c @@ -533,10 +533,6 @@ void CO_epoll_processGtw(CO_epoll_gtw_t *epGtw, && (ep->ev.data.fd == epGtw->gtwa_fdSocket || ep->ev.data.fd == epGtw->gtwa_fd) ) { - if ((ep->ev.events & (EPOLLERR | EPOLLHUP)) != 0) { - log_printf(LOG_DEBUG, DBG_GENERAL, - "socket error or hangup, event=", ep->ev.events); - } if ((ep->ev.events & EPOLLIN) != 0 && ep->ev.data.fd == epGtw->gtwa_fdSocket ) { @@ -626,6 +622,13 @@ void CO_epoll_processGtw(CO_epoll_gtw_t *epGtw, ep->epoll_new = false; } + else if ((ep->ev.events & (EPOLLERR | EPOLLHUP)) != 0) { + log_printf(LOG_DEBUG, DBG_GENERAL, + "socket error or hangup, event=", ep->ev.events); + if (close(epGtw->gtwa_fd) < 0) { + log_printf(LOG_CRIT, DBG_ERRNO, "close(gtwa_fd, hangup)"); + } + } } /* if (ep->epoll_new) */ /* if socket connection is established, verify timeout */ diff --git a/socketCAN/CO_main_basic.c b/socketCAN/CO_main_basic.c index 2685c18..4e42e83 100644 --- a/socketCAN/CO_main_basic.c +++ b/socketCAN/CO_main_basic.c @@ -549,10 +549,10 @@ int main (int argc, char *argv[]) { #ifdef CO_SINGLE_THREAD CO_epoll_processRT(&epMain, CO, false); #endif - CO_epoll_processMain(&epMain, CO, &reset); #if (CO_CONFIG_GTW) & CO_CONFIG_GTW_ASCII CO_epoll_processGtw(&epGtw, CO, &epMain); #endif + CO_epoll_processMain(&epMain, CO, &reset); CO_epoll_processLast(&epMain); #ifdef CO_USE_APPLICATION