From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mout.kundenserver.de (mout.kundenserver.de [212.227.126.135]) by sourceware.org (Postfix) with ESMTPS id 796A7385AC12 for ; Wed, 7 Apr 2021 15:31:40 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 796A7385AC12 Authentication-Results: sourceware.org; dmarc=fail (p=none dis=none) header.from=cygwin.com Authentication-Results: sourceware.org; spf=fail smtp.mailfrom=corinna-cygwin@cygwin.com Received: from calimero.vinschen.de ([24.134.7.25]) by mrelayeu.kundenserver.de (mreue009 [212.227.15.167]) with ESMTPSA (Nemesis) id 1MIMXE-1lOgVq431A-00EKcF for ; Wed, 07 Apr 2021 17:31:39 +0200 Received: by calimero.vinschen.de (Postfix, from userid 500) id 63639A80773; Wed, 7 Apr 2021 17:31:38 +0200 (CEST) Date: Wed, 7 Apr 2021 17:31:38 +0200 From: Corinna Vinschen To: cygwin-developers@cygwin.com Subject: Re: Questions about select for sockets Message-ID: Reply-To: cygwin-developers@cygwin.com Mail-Followup-To: cygwin-developers@cygwin.com References: <6b50ec89-5c02-c49f-ad85-e581589d21d3@cornell.edu> <6306d8f3-cf05-07bb-e944-05aed69266f3@cornell.edu> <3c260517-d919-f71b-6429-68e38cb2ee17@cornell.edu> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline In-Reply-To: <3c260517-d919-f71b-6429-68e38cb2ee17@cornell.edu> X-Provags-ID: V03:K1:Ain7nEd6J0zmKtRonH+plIqbh5RmQ5VkrmNyE3yRqbuOgv040eH o5KpDgXPgXMIN1Izxsp/Cl8TeDyqeD3y+YbEL9DTRobbYoQvHWjc29amZaX18ZROxiQEtE/ mfkBjgc8MOMsFDd34gjf3XcEIS7Lh7ZcMFGKWV4WoQqNL++SOlgiaHiPk9M4c2OlyDcdan3 vgqs+ePSUrp+crbF4hBFA== X-UI-Out-Filterresults: notjunk:1;V03:K0:K08K7XSOFFc=:ovQ8G03WwyX6J5EYW+AxHb /9zIYl3cv2n9WnEF1inBulMC224H5zYZv0qsNNAPzShAD+cESxBUQIX7jWT8TkdHxRkqElHjU xM4X7PE2nxHo7qoW0TL7G8qHOahgZVKUY/goKVpwvdkfcXXrNeg4eThFI6bdGn+kOW0zuDRsP RRXlf+8/WVx9pqQSDr66Xws24loXJpunfiTAi64iVX5h5t4901c1vrZFl3BJD0Kd7a/ie7BZx M4VybQxYQ7/sXsbwHjaB0hrGcGWaksnOhYmMZO8TV0w0/hPX9gdBgCKBgAfEhTr020Srh8Rus ly5och765N2ZpR7NYBO4RQFDebJxfyDVdxujXpaDi80bt9b5fNtGP9iQyAs2HFzsbuPJWqyJI YUZ5JCJFQveZfbwAaTFgjh+PokDRzbceiJonha9dPTnT/PD0FdiiQzvluF2GtOZ5AJs9kYgQQ 94rnBJNFWU+1e4QiTZ4ymCA7SZchjrOk6ATyPPKK2dg9Jtdks9s1 X-Spam-Status: No, score=-101.0 required=5.0 tests=BAYES_00, GOOD_FROM_CORINNA_CYGWIN, JMQ_SPF_NEUTRAL, KAM_DMARC_NONE, KAM_DMARC_STATUS, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_NEUTRAL, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: cygwin-developers@cygwin.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Cygwin core component developers mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 07 Apr 2021 15:31:42 -0000 On Apr 7 10:04, Ken Brown wrote: > On 4/6/2021 3:36 PM, Corinna Vinschen wrote: > > On Apr 6 20:24, Corinna Vinschen wrote: > > > On Apr 6 13:37, Ken Brown wrote: > > > > On 4/6/2021 12:28 PM, Corinna Vinschen wrote: > > > > > On Apr 6 11:44, Ken Brown wrote: > > > > > > On 4/6/2021 10:33 AM, Corinna Vinschen wrote: > > > > > > > We may also have to change the saw_shutdown_read/saw_shutdown_write > > > > > > > handling. I checked this on Linux and what happens is: > > > > > > > > > > > > > > After shutdown (fd, SHUT_RD), the socket is ready for reading and writing > > > > > > > > > > > > This seems surprising to me. Is it really the shutdown that caused it to be > > > > > > ready for writing in your test, or was it ready for writing anyway (e.g., > > > > > > because the relevant buffer was empty)? > > > > > > > > > > I guess so, too. How to make sure the socket isn't ready for writing > > > > > without going to great lengths? > > > > > > > > I guess you could have a subprocess write to the socket in a loop, so that > > > > its buffer will quickly fill up and a further write will block. > > > > > > Yeah, I was trying to minimize work, but I now lazily created a blocking > > > server in the same process with a non-blocking client, calling send(2) > > > until it fails. > > > > > > And now everything is as expected. SHUT_RD -> ready for reading, > > > SHUT_WR -> ready for writing, SHUT_RDWR -> ready for both. > > > > > > I attached my STC, for completeness. Call with an argument > > > 0 (== SHUT_RD), 1 (== SHUT_WR), or 2 (== SHUT_RDWR). > > > > I pushed a patch to handle this better. Please have a look. > > You forgot this: > > --- a/winsup/cygwin/select.cc > +++ b/winsup/cygwin/select.cc > @@ -528,6 +528,7 @@ set_bits (select_record *me, fd_set *readfds, fd_set *writefds, > if (!me->read_ready && me->read_selected > && sock->connect_state () == connect_failed) > UNIX_FD_SET (me->fd, readfds); > + ready++; > } > ready++; > } Yeah, I remembered yesterday in the evening but had already forgotten again this morning :) Please push this change. Thanks, Corinna