Date: Sat, 21 Jun 2014 11:00:08 -0700 From: hiren panchasara <hiren.panchasara@gmail.com> To: Sean Bruno <sbruno@freebsd.org> Cc: "freebsd-net@freebsd.org" <net@freebsd.org> Subject: Re: getpeername returning ENOTCONN for a connected socket Message-ID: <CALCpEUEHeBeqi8Jg5rdHnFbGALHa25UFpiTmy3GSJ_VFrqX8cw@mail.gmail.com> In-Reply-To: <1403366415.39384.11.camel@bruno> References: <CALCpEUFq1pVBjLjLV%2B88-qnjcKOM6vbw9SjOkhGdFYoT8Qsgcw@mail.gmail.com> <1403366415.39384.11.camel@bruno>
next in thread | previous in thread | raw e-mail | index | archive | help
On Sat, Jun 21, 2014 at 9:00 AM, Sean Bruno <sbruno@ignoranthack.me> wrote: > On Fri, 2014-06-20 at 16:21 -0700, hiren panchasara wrote: >> 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 > > Has this been tested in "anger" anywhere? No. This patch is from code observation after looking at the problem. I should at least writeup a small module to do local testing as Steve did in original report. I'll do that and get back. I'd appreciate if someone can point me to a better way of testing this. (specially in "anger" ;-)) cheers, Hiren
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CALCpEUEHeBeqi8Jg5rdHnFbGALHa25UFpiTmy3GSJ_VFrqX8cw>