nflog: set socket timeout

Set socket timeout so that we can exit if there is no traffic.

It would hang after the SIGINT signal, until packets arived.
pull/978/head
Victor Julien 12 years ago
parent 26c0915375
commit 0765bcc73e

@ -289,6 +289,18 @@ TmEcode ReceiveNFLOGThreadInit(ThreadVars *tv, void *initdata, void **data)
SCReturnInt(TM_ECODE_FAILED);
}
/* set a timeout to the socket so we can check for a signal
* in case we don't get packets for a longer period. */
struct timeval timev;
timev.tv_sec = 1;
timev.tv_usec = 0;
int fd = nflog_fd(ntv->h);
if (setsockopt(fd, SOL_SOCKET, SO_RCVTIMEO, &timev, sizeof(timev)) == -1) {
SCLogWarning(SC_WARN_NFLOG_SETSOCKOPT, "can't set socket "
"timeout: %s", strerror(errno));
}
#ifdef PACKET_STATISTICS
ntv->capture_kernel_packets = SCPerfTVRegisterCounter("capture.kernel_packets",
ntv->tv,

@ -166,6 +166,7 @@ const char * SCErrorToString(SCError err)
CASE_CODE (SC_ERR_NFLOG_HANDLE_PKT);
CASE_CODE (SC_ERR_NFLOG_GROUP);
CASE_CODE (SC_ERR_NFLOG_FD);
CASE_CODE (SC_WARN_NFLOG_SETSOCKOPT);
CASE_CODE (SC_WARN_NFLOG_RECV);
CASE_CODE (SC_WARN_NFLOG_LOSING_EVENTS);
CASE_CODE (SC_WARN_NFLOG_MAXBUFSIZ_REACHED);

@ -285,6 +285,7 @@ typedef enum {
SC_WARN_NFLOG_RECV,
SC_WARN_NFLOG_LOSING_EVENTS,
SC_WARN_NFLOG_MAXBUFSIZ_REACHED,
SC_WARN_NFLOG_SETSOCKOPT,
} SCError;
const char *SCErrorToString(SCError);

Loading…
Cancel
Save