diff options
author | Guy Harris <guy@alum.mit.edu> | 2018-01-19 19:39:29 -0800 |
---|---|---|
committer | Guy Harris <guy@alum.mit.edu> | 2018-01-19 19:39:29 -0800 |
commit | feef04b7a69ce32456477d07dce042b34b7e65e2 (patch) | |
tree | 4e33dfc103afcd09a3270559ca2d74b2686e62be /pcap_get_required_select_timeout.3pcap | |
parent | 7a04be7771d44a2f7e74210cc39e4df0ccef8d97 (diff) |
Add a new API to handle some non-select()able devices.
DAG adapters don't support blocking until packets arrive; a program
using select()/poll()/epoll()/kqueue-based event loop must periodically
poll DAG pcap_t's to see if they have packets available. Add
pcap_get_required_select_timeout(), which returns a pointer to a struct
timeval containing the appropriate timeout interval if polling is
required and NULL if polling isn't required or isn't supported.
Clean up the pcap_get_selectable_fd() documentation while we're at it.
Diffstat (limited to 'pcap_get_required_select_timeout.3pcap')
-rw-r--r-- | pcap_get_required_select_timeout.3pcap | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/pcap_get_required_select_timeout.3pcap b/pcap_get_required_select_timeout.3pcap new file mode 100644 index 00000000..8ef6611a --- /dev/null +++ b/pcap_get_required_select_timeout.3pcap @@ -0,0 +1,84 @@ +.\" Copyright (c) 1994, 1996, 1997 +.\" The Regents of the University of California. All rights reserved. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that: (1) source code distributions +.\" retain the above copyright notice and this paragraph in its entirety, (2) +.\" distributions including binary code include the above copyright notice and +.\" this paragraph in its entirety in the documentation or other materials +.\" provided with the distribution, and (3) all advertising materials mentioning +.\" features or use of this software display the following acknowledgement: +.\" ``This product includes software developed by the University of California, +.\" Lawrence Berkeley Laboratory and its contributors.'' Neither the name of +.\" the University nor the names of its contributors may be used to endorse +.\" or promote products derived from this software without specific prior +.\" written permission. +.\" THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED +.\" WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF +.\" MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +.\" +.TH PCAP_GET_REQUIRED_SELECT_TIMEOUT 3PCAP "19 January 2018" +.SH NAME +pcap_get_required_select_timeout \- get a file descriptor on which a +select() can be done for a live capture +.SH SYNOPSIS +.nf +.ft B +#include <pcap/pcap.h> +.ft +.LP +.ft B +struct timeval *pcap_get_required_select_timeout(pcap_t *p); +.ft +.fi +.SH DESCRIPTION +.B pcap_get_required_select_timeout() +returns, on UNIX, a pointer to a +.B struct timeval +containing a value that must be used as the minimum timeout in +.BR select() , +.BR poll() , +.BR epoll() , +and +.B kevent() +calls if +.B pcap_get_selectable_fd() +returns \-1. +.PP +The timeout that should be used in those calls must be no larger than +the smallest of all timeouts returned by +.B pcap_get_required_select_timeout() +for devices from which packets will be captured. +.PP +The device for which +.B pcap_get_selectable_fd() +returned \-1 must be put in non-blocking mode with +.BR pcap_setnonblock() , +and an attempt must always be made to read packets from the device +when the +.BR select() , +.BR poll() , +.BR epoll() , +or +.B kevent() +call returns. +.PP +Note that a device on which a read can be done without blocking may, +on some platforms, not have any packets to read if the packet buffer +timeout has expired. A call to +.B pcap_dispatch() +or +.B pcap_next_ex() +will return 0 in this case, but will not block. +.PP +.B pcap_get_required_select_timeout() +is not available on Windows. +.SH RETURN VALUE +A pointer to a +.B struct timeval +is returned if the timeout is required; otherwise +.B NULL +is returned. +.SH SEE ALSO +pcap(3PCAP), pcap_get_selectable_fd(3PCAP), select(2), poll(2), +epoll(2), kqueue(2) |