.\" 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 "20 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_wait() ,
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_wait() ,
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_wait(2), kqueue(2)
