freebsd-nq/sys/dev
Poul-Henning Kamp bb520069ca There are a number of ways an application can check if there are
inbound data waiting on a filedescriptor, such as a pipe or a socket,
for instance by using select(2), poll(2), kqueue(2), ioctl(FIONREAD)
etc.

But we have no way of finding out if written data have yet to be
disposed of, for instance, transmitted (and ack'ed!) to some remote
host, or read by the applicantion at the far end of the pipe.

The closest we get, is calling shutdown(2) on a TCP socket in
non-blocking mode, but this has the undesirable sideeffect of
preventing future communication.

Add a complement to FIONREAD, called FIONWRITE, which returns the
number of bytes not yet properly disposed of.  Implement it for
all sockets.

Background:

A HTTP server will want to time out connections, if no new request
arrives within a certain period after the last transmitted response
has actually been sent (and ack'ed).

For a busy HTTP server, this timeout can be subsecond duration.

In order to signal to a load-balancer that the connection is truly
dead, TCP_RST will be the preferred method, as this avoids the need
for a RTT delay for FIN handshaking, with a client which, surprisingly
often, no longer at the remote IP number.

If a slow, distant client is being served a response which is big
enough to fill the window, but small enough to fit in the socket
buffer, the write(2) call will return immediately.

If the session timeout is armed at that time, all bytes in the
response may not have been transmitted by the time it fires.

FIONWRITE allows the timeout to check that no data is outstanding
on the connection, before it TCP_RST's it.

Input & Idea from: rwatson
Approved by:	re (kib)
2009-06-28 11:28:14 +00:00
..
aac We no longer need to use d_thread_t, migrate to struct thread *. 2009-05-20 17:29:21 +00:00
acpi_support Fix build with ACPI_DEBUG. 2009-06-23 15:08:03 +00:00
acpica Add a missing return in NULL mutex case. 2009-06-22 17:46:55 +00:00
adb Use si_drv1 to hold the softc for the adb_mouse character device instead of 2009-01-29 16:18:49 +00:00
adlink
advansys
ae Use if_maddr_rlock()/if_maddr_runlock() rather than IF_ADDR_LOCK()/ 2009-06-26 11:45:06 +00:00
age Use if_maddr_rlock()/if_maddr_runlock() rather than IF_ADDR_LOCK()/ 2009-06-26 11:45:06 +00:00
agp strict kobj signatures: fixes in agp driver 2009-06-11 17:06:07 +00:00
aha Pass bus_get_dma_tag() into the first argument of bus_dma_create_tag() 2008-10-07 23:55:32 +00:00
ahb
aic Snip redundant assignment. 2009-05-13 22:31:25 +00:00
aic7xxx Re-enable WARNS=6 after my universe test. 2009-06-02 17:27:54 +00:00
alc Use if_maddr_rlock()/if_maddr_runlock() rather than IF_ADDR_LOCK()/ 2009-06-26 11:45:06 +00:00
ale Use if_maddr_rlock()/if_maddr_runlock() rather than IF_ADDR_LOCK()/ 2009-06-26 11:45:06 +00:00
amd
amdtemp Fix comment explaining where this driver came from. 2009-03-13 16:43:31 +00:00
amr We no longer need to use d_thread_t, migrate to struct thread *. 2009-05-20 17:29:21 +00:00
an Shutdown routine returns int. 2009-02-04 20:39:45 +00:00
arcmsr We no longer need to use d_thread_t, migrate to struct thread *. 2009-05-20 17:29:21 +00:00
asmc Add support for MacBook4,1. 2009-06-26 10:23:17 +00:00
asr Unmark the ASR Compat IOCTLs as BURN_BRIDGES, per scottl@ 2009-05-09 17:47:42 +00:00
ata MFp4: 2009-06-24 19:49:18 +00:00
ath There are a number of ways an application can check if there are 2009-06-28 11:28:14 +00:00
atkbdc Prevent atkbd(4) interrupt handler from calling keyboard callback function 2009-04-17 00:30:56 +00:00
auxio
bce Use if_maddr_rlock()/if_maddr_runlock() rather than IF_ADDR_LOCK()/ 2009-06-26 11:45:06 +00:00
bfe Use if_maddr_rlock()/if_maddr_runlock() rather than IF_ADDR_LOCK()/ 2009-06-26 11:45:06 +00:00
bge Use if_maddr_rlock()/if_maddr_runlock() rather than IF_ADDR_LOCK()/ 2009-06-26 11:45:06 +00:00
bktr Unbreak bktr(4). 2009-05-26 12:01:37 +00:00
bm Use if_maddr_rlock()/if_maddr_runlock() rather than IF_ADDR_LOCK()/ 2009-06-26 11:45:06 +00:00
buslogic
bwi In bwi_newstate, only zero the bssid when we stop a STA. And only 2009-06-02 16:48:10 +00:00
cardbus Minorly improved debugging. Use the DEVPRINTF macro and report the 2009-03-13 05:31:27 +00:00
cas Use if_maddr_rlock()/if_maddr_runlock() rather than IF_ADDR_LOCK()/ 2009-06-26 11:45:06 +00:00
ce Use new spelling of the NG_*LEN constants. 2009-06-09 07:14:32 +00:00
cfe Last minute TTY API change: remove mutex argument from tty_alloc(). 2009-05-29 06:41:23 +00:00
cfi Move from using devclass_find_free_unit(cfi_diskclass, 0) to -1, since 2009-06-10 17:41:24 +00:00
ciss We no longer need to use d_thread_t, migrate to struct thread *. 2009-05-20 17:29:21 +00:00
cm Remove unused ifaddr and ifreq local variables. 2009-02-12 23:55:35 +00:00
cmx
coretemp Introduce cpu_vendor_id and replace a lot of strcmp(cpu_vendor, "..."). 2008-11-26 19:25:13 +00:00
cp Use new spelling of the NG_*LEN constants. 2009-06-09 07:14:32 +00:00
cpuctl - Don't zero data field in case of MSR write operation. Before this change 2009-06-26 22:13:15 +00:00
cpufreq
cs Use if_maddr_rlock()/if_maddr_runlock() rather than IF_ADDR_LOCK()/ 2009-06-26 11:45:06 +00:00
ct
ctau Use new spelling of the NG_*LEN constants. 2009-06-09 07:14:32 +00:00
cx Use new spelling of the NG_*LEN constants. 2009-06-09 07:14:32 +00:00
cxgb Use if_maddr_rlock() instead of IF_ADDR_LOCK() to protect access to 2009-06-26 19:04:08 +00:00
cy
dc Use if_maddr_rlock()/if_maddr_runlock() rather than IF_ADDR_LOCK()/ 2009-06-26 11:45:06 +00:00
dcons Last minute TTY API change: remove mutex argument from tty_alloc(). 2009-05-29 06:41:23 +00:00
de Use if_maddr_rlock()/if_maddr_runlock() rather than IF_ADDR_LOCK()/ 2009-06-26 11:45:06 +00:00
digi Remove unused files from the digi(4) driver. 2009-01-16 14:45:48 +00:00
dpt
drm We shouldn't need to drop and reaquire the lock here. 2009-06-25 19:23:25 +00:00
e1000 Use if_maddr_rlock()/if_maddr_runlock() rather than IF_ADDR_LOCK()/ 2009-06-26 11:45:06 +00:00
ed Use if_maddr_rlock()/if_maddr_runlock() rather than IF_ADDR_LOCK()/ 2009-06-26 11:45:06 +00:00
eisa strict kobj signatures: fix assortment of bus_read_ivar impls 2009-06-11 17:06:58 +00:00
en Hide an unused variable in case we compile with neither INET nor INET6. 2008-11-06 09:41:31 +00:00
ep Add a missing break in a switch statement. 2009-05-15 21:06:28 +00:00
esp o Move the MODULE_DEPEND() for cam(4) from the esp_sbus.c front-end to 2008-09-08 20:20:44 +00:00
et Use if_maddr_rlock()/if_maddr_runlock() rather than IF_ADDR_LOCK()/ 2009-06-26 11:45:06 +00:00
ex Use if_maddr_rlock()/if_maddr_runlock() rather than IF_ADDR_LOCK()/ 2009-06-26 11:45:06 +00:00
exca __LP64__ is what's defined, not _LP64_, according to the manual (and 2009-03-09 13:29:13 +00:00
fatm Use bus_get_dma_tag() so fatm(4) works on platforms requiring it. 2008-09-30 18:52:43 +00:00
fb - Change some softc members to be unsigned where more appropriate. 2009-04-28 20:49:47 +00:00
fdc With the fdc control device disappearing some 5 years ago, it is no 2009-06-24 19:30:31 +00:00
fe Use if_maddr_rlock()/if_maddr_runlock() rather than IF_ADDR_LOCK()/ 2009-06-26 11:45:06 +00:00
firewire Fix what seems to be an obvious typo preventing the body of the 2009-06-23 09:02:24 +00:00
flash - Remove nonexistent header file from includes list 2009-05-13 18:31:28 +00:00
fxp Use if_maddr_rlock()/if_maddr_runlock() rather than IF_ADDR_LOCK()/ 2009-06-26 11:45:06 +00:00
gem Use if_maddr_rlock()/if_maddr_runlock() rather than IF_ADDR_LOCK()/ 2009-06-26 11:45:06 +00:00
glxsb Fix two possible (but unlikely) NULL-pointer dereferences in glxsb(4). 2008-11-17 07:09:40 +00:00
hatm
hifn shutdown returns an int 2009-02-05 19:37:49 +00:00
hme Use if_maddr_rlock()/if_maddr_runlock() rather than IF_ADDR_LOCK()/ 2009-06-26 11:45:06 +00:00
hptiop Use __packed from cdefs.h 2009-03-25 06:27:56 +00:00
hptmv MFp4: 2009-06-24 20:43:51 +00:00
hptrr
hwpmc Fix a LOR between pmc_sx and proctree/allproc when creating a new thread 2009-06-25 20:59:37 +00:00
ic add %b formats for various registers 2009-06-21 19:17:22 +00:00
ichsmb - Change ichsmb(4) to follow the format of all the other smbus controllers 2009-02-03 16:14:37 +00:00
ichwd Rename two functions to make their purpose clearer. Add tons of comments. 2009-03-19 12:39:13 +00:00
ida
ie Use if_maddr_rlock()/if_maddr_runlock() rather than IF_ADDR_LOCK()/ 2009-06-26 11:45:06 +00:00
ieee488
if_ndis Use if_maddr_rlock()/if_maddr_runlock() rather than IF_ADDR_LOCK()/ 2009-06-26 11:45:06 +00:00
iicbus - Rename ds1672 and ds133x devices to "ds1672_rtc" and "ds133x_rtc" 2009-04-21 22:48:12 +00:00
iir Remove unused VM includes. 2009-06-03 20:25:13 +00:00
io
ipmi Import ACPICA 20090521. 2009-06-05 18:44:36 +00:00
ips
ipw Overhaul monitor mode handling: 2009-05-20 20:00:40 +00:00
iscsi/initiator Change the type of uio_resid member of struct uio from int to ssize_t. 2009-06-25 18:46:30 +00:00
isp Change uses of the struct ccb_hdr timeout_ch missed when isp(4) was 2009-05-10 20:14:19 +00:00
ispfw Make ispfw(4) play nice with individual firmware modules. 2008-11-11 00:14:10 +00:00
iwi rssi/nf data are now dbm, tag them accordingly 2009-05-21 15:30:59 +00:00
iwn validate tx rate(s) in the raw xmit path 2009-05-29 23:41:31 +00:00
ixgb Use if_maddr_rlock()/if_maddr_runlock() rather than IF_ADDR_LOCK()/ 2009-06-26 11:45:06 +00:00
ixgbe Use if_maddr_rlock()/if_maddr_runlock() rather than IF_ADDR_LOCK()/ 2009-06-26 11:45:06 +00:00
jme Use if_maddr_rlock()/if_maddr_runlock() rather than IF_ADDR_LOCK()/ 2009-06-26 11:45:06 +00:00
joy Use si_drv1 to store joy(4)'s softc. 2009-04-14 11:23:09 +00:00
kbd Move buffer management into kbd and kbdmux drivers. 2009-06-05 15:19:05 +00:00
kbdmux Use proper types in kbdmux_kbd_getc(): 2009-06-08 20:24:29 +00:00
ksyms strict kobj signatures: linker_if fixes 2009-06-11 17:05:45 +00:00
le Use if_maddr_rlock()/if_maddr_runlock() rather than IF_ADDR_LOCK()/ 2009-06-26 11:45:06 +00:00
led Remove unit2minor() use from kernel code. 2008-09-26 14:19:52 +00:00
lge Use if_maddr_rlock()/if_maddr_runlock() rather than IF_ADDR_LOCK()/ 2009-06-26 11:45:06 +00:00
lmc Unbreak build. 2009-05-30 18:39:22 +00:00
malo Use if_maddr_rlock()/if_maddr_runlock() rather than IF_ADDR_LOCK()/ 2009-06-26 11:45:06 +00:00
mc146818
mca strict kobj signatures: fix assortment of bus_read_ivar impls 2009-06-11 17:06:58 +00:00
mcd
md Implement global and per-uid accounting of the anonymous memory. Add 2009-06-23 20:45:22 +00:00
mem
mfi fw_state ad cur_state are holding unsigned bitfields, so declare then 2009-06-24 16:11:29 +00:00
mge Use if_maddr_rlock()/if_maddr_runlock() rather than IF_ADDR_LOCK()/ 2009-06-26 11:45:06 +00:00
mii - Also probe DP83865, which is an is an ultra low power version 2009-06-13 23:27:04 +00:00
mk48txx
mlx Convert mlx(4) and mly(4) to si_drv1 instead of dev2unit(). 2009-04-18 07:36:38 +00:00
mly Convert mlx(4) and mly(4) to si_drv1 instead of dev2unit(). 2009-04-18 07:36:38 +00:00
mmc read_ivar takes a uintptr_t * not a u_char *. 2009-03-12 06:36:44 +00:00
mn Move mn over. One of the last stragglers in sys/pci. There's no 2008-11-02 17:04:54 +00:00
mpt - Remove unused variables. [1] 2009-06-24 20:52:59 +00:00
mse Make mse(4) use si_drv1, instead of using unit numbers. 2009-04-20 15:15:24 +00:00
msk Use if_maddr_rlock()/if_maddr_runlock() rather than IF_ADDR_LOCK()/ 2009-06-26 11:45:06 +00:00
mwl track HT flags move to iv_flags_ht 2009-06-07 22:03:07 +00:00
mxge Use if_maddr_rlock()/if_maddr_runlock() rather than IF_ADDR_LOCK()/ 2009-06-26 11:45:06 +00:00
my Use if_maddr_rlock()/if_maddr_runlock() rather than IF_ADDR_LOCK()/ 2009-06-26 11:45:06 +00:00
ncv strict kobj sigs: fix assortment of device_detach and device_shutdown impls 2009-06-11 17:14:28 +00:00
nfe Use if_maddr_rlock()/if_maddr_runlock() rather than IF_ADDR_LOCK()/ 2009-06-26 11:45:06 +00:00
nge Use if_maddr_rlock()/if_maddr_runlock() rather than IF_ADDR_LOCK()/ 2009-06-26 11:45:06 +00:00
nmdm - Remove an unnecessary memory barrier from an atomic op. 2009-06-09 13:33:03 +00:00
nsp strict kobj sigs: fix assortment of device_detach and device_shutdown impls 2009-06-11 17:14:28 +00:00
null
nve Use if_maddr_rlock()/if_maddr_runlock() rather than IF_ADDR_LOCK()/ 2009-06-26 11:45:06 +00:00
nvram
nxge Use if_maddr_rlock()/if_maddr_runlock() rather than IF_ADDR_LOCK()/ 2009-06-26 11:45:06 +00:00
ofw Missed style fixes. 2009-06-14 00:15:26 +00:00
patm Remove unused variable. 2008-11-26 13:44:11 +00:00
pbio Replace all calls to minor() with dev2unit(). 2008-09-27 08:51:18 +00:00
pccard Another PC Card that needs the CIS strings for the Surecom EP-427X, 2009-04-24 17:27:45 +00:00
pccbb Revert r190676,190677 2009-04-10 04:08:34 +00:00
pcf strict kobj signatures: fix iicbus_write impl in dev/pcf 2009-06-11 17:15:44 +00:00
pci Enable MSI in the MSI capability registers any time that the first message 2009-06-22 20:08:06 +00:00
pcn Use if_maddr_rlock()/if_maddr_runlock() rather than IF_ADDR_LOCK()/ 2009-06-26 11:45:06 +00:00
pdq Use if_maddr_rlock()/if_maddr_runlock() rather than IF_ADDR_LOCK()/ 2009-06-26 11:45:06 +00:00
powermac_nvram Use si_drv1 instead of dev2unit() in powermac_nvram. 2009-04-14 13:18:39 +00:00
ppbus Change if_output to take a struct route as its fourth argument in order 2009-04-16 20:30:28 +00:00
ppc Added entries for Lava SP-PCI (1 serial + 1 parallel) PCI card. The 2009-02-11 00:08:03 +00:00
pst
puc Make puc(4) aware of this 2 port serial card based on NetMos 9835: 2009-06-20 00:04:48 +00:00
quicc
ral validate tx rate(s) in the raw xmit path 2009-05-29 23:41:31 +00:00
random There is rubbish here 2009-05-25 22:50:11 +00:00
rc
re Use if_maddr_rlock()/if_maddr_runlock() rather than IF_ADDR_LOCK()/ 2009-06-26 11:45:06 +00:00
rndtest
rp Last minute TTY API change: remove mutex argument from tty_alloc(). 2009-05-29 06:41:23 +00:00
safe shutdown returns an int 2009-02-05 19:37:49 +00:00
sbni Disable the inline assembly crc32 routine and use the C version instead. 2008-09-10 18:42:19 +00:00
scc Make iclear return int, since that matches all function definitions of it. 2009-02-05 19:32:34 +00:00
scd
sdhci Add support for interruptless kernel dumping. 2009-02-17 19:12:15 +00:00
sec Fix Book-E/MPC85XX build. Some prototypes were wrong and got revealed with 2009-06-13 08:57:04 +00:00
sf Use if_maddr_rlock()/if_maddr_runlock() rather than IF_ADDR_LOCK()/ 2009-06-26 11:45:06 +00:00
si Last minute TTY API change: remove mutex argument from tty_alloc(). 2009-05-29 06:41:23 +00:00
siba Use some casting to get the right addresses. This is likely unwise 2008-09-26 05:40:56 +00:00
sio remove now-redunant cardbus attachment. 2009-03-09 13:23:54 +00:00
sis Use if_maddr_rlock()/if_maddr_runlock() rather than IF_ADDR_LOCK()/ 2009-06-26 11:45:06 +00:00
sk Use if_maddr_rlock()/if_maddr_runlock() rather than IF_ADDR_LOCK()/ 2009-06-26 11:45:06 +00:00
smbus Make generic_intr routines match prototype. 2009-03-09 13:30:00 +00:00
smc strict kobj signatures: fix assortment of miibus_writereg impls 2009-06-11 17:14:54 +00:00
sn Use if_maddr_rlock()/if_maddr_runlock() rather than IF_ADDR_LOCK()/ 2009-06-26 11:45:06 +00:00
snc Use if_maddr_rlock()/if_maddr_runlock() rather than IF_ADDR_LOCK()/ 2009-06-26 11:45:06 +00:00
snp Keep this line shorter than 80 columns. 2009-05-13 19:29:50 +00:00
sound Use the correct mutex in umidi_open() 2009-06-27 21:21:11 +00:00
speaker Change the type of uio_resid member of struct uio from int to ssize_t. 2009-06-25 18:46:30 +00:00
spibus strict kobj signatures: fix assortment of bus_read_ivar impls 2009-06-11 17:06:58 +00:00
ste Use if_maddr_rlock()/if_maddr_runlock() rather than IF_ADDR_LOCK()/ 2009-06-26 11:45:06 +00:00
stg strict kobj sigs: fix assortment of device_detach and device_shutdown impls 2009-06-11 17:14:28 +00:00
stge Use if_maddr_rlock()/if_maddr_runlock() rather than IF_ADDR_LOCK()/ 2009-06-26 11:45:06 +00:00
streams The streams ptm code is pretty awful and likely incorrect. I don't know 2009-02-16 20:12:28 +00:00
sym Use xpt_register_async() in order to remove code duplication. 2008-10-14 20:18:57 +00:00
syscons Small fixes to Unicode handling: 2009-06-16 14:55:13 +00:00
tdfx Let tdfx(4) use si_drv1 instead of using dev2unit(). 2009-04-14 11:57:26 +00:00
ti Use if_maddr_rlock()/if_maddr_runlock() rather than IF_ADDR_LOCK()/ 2009-06-26 11:45:06 +00:00
tl Use if_maddr_rlock()/if_maddr_runlock() rather than IF_ADDR_LOCK()/ 2009-06-26 11:45:06 +00:00
trm
tsec Use if_maddr_rlock()/if_maddr_runlock() rather than IF_ADDR_LOCK()/ 2009-06-26 11:45:06 +00:00
twa We no longer need to use d_thread_t, migrate to struct thread *. 2009-05-20 17:29:21 +00:00
twe We no longer need to use d_thread_t, migrate to struct thread *. 2009-05-20 17:29:21 +00:00
tx Use if_maddr_rlock()/if_maddr_runlock() rather than IF_ADDR_LOCK()/ 2009-06-26 11:45:06 +00:00
txp Use if_maddr_rlock()/if_maddr_runlock() rather than IF_ADDR_LOCK()/ 2009-06-26 11:45:06 +00:00
uart Move the memory layout definitions and logic from mvreg.h to mvwin.h 2009-06-12 20:00:38 +00:00
ubsec strict kobj sigs: fix assortment of device_detach and device_shutdown impls 2009-06-11 17:14:28 +00:00
usb Add ids of Sitecom USB wlan gadget. 2009-06-28 10:30:53 +00:00
utopia
vge Use if_maddr_rlock()/if_maddr_runlock() rather than IF_ADDR_LOCK()/ 2009-06-26 11:45:06 +00:00
vkbd Remove unit2minor() use from kernel code. 2008-09-26 14:19:52 +00:00
vr Use if_maddr_rlock()/if_maddr_runlock() rather than IF_ADDR_LOCK()/ 2009-06-26 11:45:06 +00:00
vx MFp4: Network Adapter is redundant. 2008-08-25 05:20:17 +00:00
watchdog
wb Use if_maddr_rlock()/if_maddr_runlock() rather than IF_ADDR_LOCK()/ 2009-06-26 11:45:06 +00:00
wds
wi Use if_maddr_rlock()/if_maddr_runlock() rather than IF_ADDR_LOCK()/ 2009-06-26 11:45:06 +00:00
wl Use if_maddr_rlock()/if_maddr_runlock() rather than IF_ADDR_LOCK()/ 2009-06-26 11:45:06 +00:00
wpi Overhaul monitor mode handling: 2009-05-20 20:00:40 +00:00
xe Use if_maddr_rlock()/if_maddr_runlock() rather than IF_ADDR_LOCK()/ 2009-06-26 11:45:06 +00:00
xen update backend_changed to reflect .m prototype 2009-06-13 21:55:08 +00:00
xl Use if_maddr_rlock()/if_maddr_runlock() rather than IF_ADDR_LOCK()/ 2009-06-26 11:45:06 +00:00