Date: Fri, 20 Jun 2014 16:21:03 -0700 From: hiren panchasara <hiren.panchasara@gmail.com> To: "freebsd-net@freebsd.org" <net@freebsd.org> Subject: getpeername returning ENOTCONN for a connected socket Message-ID: <CALCpEUFq1pVBjLjLV%2B88-qnjcKOM6vbw9SjOkhGdFYoT8Qsgcw@mail.gmail.com>
next in thread | raw e-mail | index | archive | help
Reviving an old thread where Steve found this problem: A call to getpeername on a connected tcp socket returns ENOTCONN with no prior errors being reported by previous socket calls. Please look at http://lists.freebsd.org/pipermail/freebsd-net/2011-January/027647.html for more details. Here is a proposed patch derived from $src/sys/netsmb/smb_trantcp.c:nbssn_recv()'s way of handling a similar situation: Index: sys/kern/uipc_syscalls.c =================================================================== --- sys/kern/uipc_syscalls.c (revision 267693) +++ sys/kern/uipc_syscalls.c (working copy) @@ -1755,6 +1755,12 @@ if (error != 0) return (error); so = fp->f_data; + if ((so->so_state & (SS_ISDISCONNECTED|SS_ISDISCONNECTING)) || + (so->so_rcv.sb_state & SBS_CANTRCVMORE)) { + error = ECONNRESET; + goto done; + } if ((so->so_state & (SS_ISCONNECTED|SS_ISCONFIRMING)) == 0) { error = ENOTCONN; goto done; Does this look correct? cheers, Hiren
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CALCpEUFq1pVBjLjLV%2B88-qnjcKOM6vbw9SjOkhGdFYoT8Qsgcw>