diff options
Diffstat (limited to 'src/ipcpd/eth')
| -rw-r--r-- | src/ipcpd/eth/eth.c | 14 | 
1 files changed, 13 insertions, 1 deletions
| diff --git a/src/ipcpd/eth/eth.c b/src/ipcpd/eth/eth.c index 3a749cf7..f9691626 100644 --- a/src/ipcpd/eth/eth.c +++ b/src/ipcpd/eth/eth.c @@ -380,6 +380,11 @@ static int eth_ipcp_send_frame(const uint8_t * dst_addr,          uint8_t            cf = 0x03;  #endif          struct eth_frame * e_frame; +#ifdef HAVE_RAW_SOCKETS +        fd_set             fds; + +        FD_ZERO(&fds); +#endif          assert(frame); @@ -424,13 +429,20 @@ static int eth_ipcp_send_frame(const uint8_t * dst_addr,          }  #elif defined(HAVE_RAW_SOCKETS) +        FD_SET(eth_data.s_fd, &fds); +        if (select(eth_data.s_fd + 1, NULL, &fds, NULL, NULL) < 0) { +                log_dbg("Select() failed: %s.", strerror(errno)); +                return -1; +        } +        assert(FD_ISSET(eth_data.s_fd, &fds)); +          if (sendto(eth_data.s_fd,                     frame,                     frame_len,                     0,                     (struct sockaddr *) ð_data.device,                     sizeof(eth_data.device)) <= 0) { -                log_dbg("Failed to send message."); +                log_dbg("Failed to send message: %s.", strerror(errno));                  return -1;          }  #endif /* HAVE_NETMAP */ | 
