From owner-freebsd-net@FreeBSD.ORG Fri Jun 20 23:21:04 2014 Return-Path: Delivered-To: net@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id AB581EB7 for ; Fri, 20 Jun 2014 23:21:04 +0000 (UTC) Received: from mail-qg0-x231.google.com (mail-qg0-x231.google.com [IPv6:2607:f8b0:400d:c04::231]) (using TLSv1 with cipher ECDHE-RSA-RC4-SHA (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority G2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 70EDE25D8 for ; Fri, 20 Jun 2014 23:21:04 +0000 (UTC) Received: by mail-qg0-f49.google.com with SMTP id f51so3998566qge.22 for ; Fri, 20 Jun 2014 16:21:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:date:message-id:subject:from:to:content-type; bh=01CljURC2F2Y9feTw4tMqXRwirEUJBqo83c/OOqVH/4=; b=liYo7MMjxpm9Gq7fI//6F6En87vkQMAZ/j81hcsfslLv2O9KSPOEQIxf+q25CzcAaM xTTVsOkpqEgtT6Y4W0RdJpNv0DacCsrP3XGmT/om4ZgGKJo3lPGSzF1+vjSuzZOHXBXc nkkZMtgWKT3ecsRk15IFeycuaCxZvwit6+0AFpI/IOOJFzWRve7Mt6jw13XZaz88MKy5 /WZ2xCAQ8RLB8Zx9+nN3I3NHfLaUqGxd2bae/qH2CazhFw6vOzafT1qJeMTegJPqKoc+ 5aCMh4OOajFGNPxQ/qB+Y8JBPeESgTZ7sF+wxmuoDNvLhv+QXL59saw2uvuO2zUimU0R nCow== MIME-Version: 1.0 X-Received: by 10.224.166.73 with SMTP id l9mr9751319qay.34.1403306463623; Fri, 20 Jun 2014 16:21:03 -0700 (PDT) Received: by 10.96.73.39 with HTTP; Fri, 20 Jun 2014 16:21:03 -0700 (PDT) Date: Fri, 20 Jun 2014 16:21:03 -0700 Message-ID: Subject: getpeername returning ENOTCONN for a connected socket From: hiren panchasara To: "freebsd-net@freebsd.org" Content-Type: text/plain; charset=UTF-8 X-BeenThere: freebsd-net@freebsd.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: Networking and TCP/IP with FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 20 Jun 2014 23:21:04 -0000 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