> sendfile(2) returns ENOTCONN when the remote side has disconnected instead > of EPIPE. Can this fix be applied? Is there a reason for it being the > way it is? I know EPIPE can cause SIGPIPE which can cause problems, but > the error here is incorrect, and considering that the manpage mentions > EPIPE as a possible error... is this perhaps due to a change in the > socket flags API? I know the problem is on 4.x and 5.x. > > Index: uipc_syscalls.c > =================================================================== > RCS file: /home/ncvs/src/sys/kern/uipc_syscalls.c,v > retrieving revision 1.162 > diff -u -r1.162 uipc_syscalls.c > --- uipc_syscalls.c 28 Dec 2003 08:57:08 -0000 1.162 > +++ uipc_syscalls.c 2 Jan 2004 21:56:10 -0000 > @@ -1697,10 +1697,6 @@ > error = EINVAL; > goto done; > } > - if ((so->so_state & SS_ISCONNECTED) == 0) { > - error = ENOTCONN; > - goto done; > - } > if (uap->offset < 0) { > error = EINVAL; > goto done;
sendfile(8) tries to maintain compatibility with sosend as much as is reasonable. ENOTCONN is the appropriate error to return if the socket isn't connected. sosend checks SS_CANTSENDMORE prior to the check for SS_ISCONNECTED, however, and returns EPIPE in that case. Perhaps sendfile should be changed to do the same (just a though - I'm not proposing that this be done). Removing the check entirely seems clearly wrong, however. -DG David G. Lawrence President Download Technologies, Inc. - http://www.downloadtech.com - (866) 399 8500 TeraSolutions, Inc. - http://www.terasolutions.com - (888) 346 7175 The FreeBSD Project - http://www.freebsd.org Pave the road of life with opportunities. _______________________________________________ [EMAIL PROTECTED] mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-hackers To unsubscribe, send any mail to "[EMAIL PROTECTED]"