Bug 20861

Summary: libc_r does not honor socket timeouts
Product: Base System Reporter: jml <jml>
Component: kernAssignee: freebsd-threads (Nobody) <threads>
Status: Closed FIXED    
Severity: Affects Only Me    
Priority: Normal    
Version: 4.1-RELEASE   
Hardware: Any   
OS: Any   

Description jml 2000-08-26 15:00:00 UTC
read(), write(), et al. in libc_r do not honor socket timeouts set via
setsockopt(sd, SOL_SOCKET, SO_{SND,RCV}TIMEO, ...). Timeout is always
set to NULL and the read loops consume EAGAIN.

Fix: 

In read/write/etc. implementation, do a S_ISSOCK() on the descriptor,
and if true, get a proper timeout value using _thread_sys_getsockopt()
instead of assuming NULL. When the timeout expires, return EAGAIN if
a proper timeout was used.
How-To-Repeat: s = socket(...);
setsockopt(s, SOL_SOCKET, SO_RCVTIMEO, (void*) &timeout, sizeof(timeout));
connect(s, ...);
read(s, buf, nbytes); <-- blocks and never returns EAGAIN
Comment 1 Sheldon Hearn freebsd_committer freebsd_triage 2000-08-28 10:59:02 UTC
Responsible Changed
From-To: freebsd-bugs->jasone

Over to maintainer.
Comment 2 Jason Evans freebsd_committer freebsd_triage 2002-05-11 23:22:18 UTC
Responsible Changed
From-To: jasone->freebsd-bugs
Comment 3 Kris Kennaway freebsd_committer freebsd_triage 2003-07-13 02:32:35 UTC
Responsible Changed
From-To: freebsd-bugs->freebsd-threads

Assign to threads mailing list
Comment 4 Maxim Konovalov freebsd_committer freebsd_triage 2006-04-18 22:33:23 UTC
State Changed
From-To: open->closed

Superseded by threads/24472.