From owner-freebsd-hackers@freebsd.org Fri Mar 3 15:43:31 2017 Return-Path: Delivered-To: freebsd-hackers@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 78D59CF627C for ; Fri, 3 Mar 2017 15:43:31 +0000 (UTC) (envelope-from nowakpl@platinum.linux.pl) Received: from platinum.edu.pl (platinum.edu.pl [137.74.1.182]) by mx1.freebsd.org (Postfix) with ESMTP id 3E54F12E4 for ; Fri, 3 Mar 2017 15:43:30 +0000 (UTC) (envelope-from nowakpl@platinum.linux.pl) Received: from platinum.edu.pl (localhost [127.0.0.1]) by platinum.edu.pl (Postfix) with ESMTP id 6EAA0780176 for ; Fri, 3 Mar 2017 16:43:16 +0100 (CET) Received: by platinum.edu.pl (Postfix, from userid 87) id 60D77780171; Fri, 3 Mar 2017 16:43:16 +0100 (CET) X-Spam-Checker-Version: SpamAssassin 3.4.1 (2015-04-28) on platinum.edu.pl X-Spam-Level: X-Spam-Status: No, score=-0.8 required=3.0 tests=ALL_TRUSTED,AWL autolearn=disabled version=3.4.1 Received: from [10.255.1.11] (unknown [109.231.16.141]) by platinum.edu.pl (Postfix) with ESMTPA id 1C193780171 for ; Fri, 3 Mar 2017 16:43:14 +0100 (CET) Subject: Re: Discrepancy between kevent error codes with socketpair fds To: freebsd-hackers@freebsd.org References: From: Adam Nowacki Message-ID: Date: Fri, 3 Mar 2017 16:43:02 +0100 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:45.0) Gecko/20100101 Thunderbird/45.7.1 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV using ClamSMTP X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 03 Mar 2017 15:43:31 -0000 Because the first descriptor is now a kqueue (kqfd == sv[0]). You can't add a kqueue descriptor to another kqueue so EINVAL. Second descriptor doesn't exist anymore so EBADF. On 2017-03-03 15:11, ss griffon wrote: > I'm hoping somebody can explain the following behavior to me. It's not > causing me any issues but I find it curious: > > 1. open a socketpair (int sv[2]) > 2. close both ends > 3. attempt to add sv[0] to kevent and "Invalid Argument" is returned > (EINVAL) > 4. attempt to add sv[1] to kevent instead of sv[0] and "Bad Descriptor" is > returned (EBADF). > > It doesn't seem to matter the order of closing the sockets. Sample code is > below. Thanks in advance. > > #include > #include > #include > #include > #include > #include > #include > > int main(int argc, char** argv) > { > int sv[2]; > > int err = socketpair(AF_LOCAL, SOCK_SEQPACKET, 0, sv); > if(err == -1) > { > perror("socketpair"); > exit(1); > } > > err = close(sv[0]); > if(err == -1) > { > perror("close1"); > exit(1); > } > > err = close(sv[1]); > if(err == -1) > { > perror("close2"); > exit(1); > } > > int kqfd = kqueue(); > if(kqfd == -1) > { > perror("kqueue"); > exit(1); > } > > struct kevent event; > EV_SET(&event, sv[0], EVFILT_READ, EV_ADD, 0, 0, 0); //Change to sv[1] > to get EBADF > > int events = kevent(kqfd, &event, 1, > nullptr, 0, nullptr); //Returns EINVAL > if(events == -1) > { > perror("kevent"); > exit(1); > } > > return 0; > } > _______________________________________________ > freebsd-hackers@freebsd.org mailing list > https://lists.freebsd.org/mailman/listinfo/freebsd-hackers > To unsubscribe, send any mail to "freebsd-hackers-unsubscribe@freebsd.org" >