From: Evgeniy Polyakov <johnpol@2ka.mipt.ru>
To: David Miller <davem@davemloft.net>
Cc: shemminger@linux-foundation.org, netdev@vger.kernel.org
Subject: Re: [Bug 8013] New: select for write hangs on a socket after write returned ECONNRESET
Date: Thu, 22 Feb 2007 15:14:27 +0300 [thread overview]
Message-ID: <20070222121427.GA29455@2ka.mipt.ru> (raw)
In-Reply-To: <20070221.224543.95508003.davem@davemloft.net>
On Wed, Feb 21, 2007 at 10:45:43PM -0800, David Miller (davem@davemloft.net) wrote:
> POLLHUP is a complete mess, because it means different things on
> different kinds of fds. And exactly, because it is not maskable,
> this makes it totally useless for sockets.
POLLHUP does show that socket can not be used for transfer, that is what
select() expects to receive. Given select() semantic and the fact, that
socket error is cleared, there is no simple way to say that socket is
not suitable for output - actually not - all reset events ends up with
tcp_done() which marks socket as close, so if in polling time we have
closed socket, it can be considered as error and thus we can add POLLERR
into the mask - so we can extend following code in poll:
if (sk->sk_shutdown == SHUTDOWN_MASK || sk->sk_state == TCP_CLOSE)
mask |= POLLHUP;
to
if (sk->sk_shutdown == SHUTDOWN_MASK || sk->sk_state == TCP_CLOSE)
mask |= POLLHUP | (sk->sk_state == TCP_CLOSE)?POLLERR:0;
Thoughts?
--
Evgeniy Polyakov
next prev parent reply other threads:[~2007-02-22 12:15 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-02-16 0:04 Fw: [Bug 8013] New: select for write hangs on a socket after write returned ECONNRESET Stephen Hemminger
2007-02-16 15:25 ` Evgeniy Polyakov
2007-02-16 15:28 ` Evgeniy Polyakov
2007-02-16 15:39 ` Evgeniy Polyakov
2007-02-16 15:54 ` Evgeniy Polyakov
2007-02-16 16:10 ` Evgeniy Polyakov
2007-02-16 18:29 ` Stephen Hemminger
2007-02-16 18:34 ` Evgeniy Polyakov
2007-02-17 16:25 ` Evgeniy Polyakov
2007-02-19 14:19 ` Jarek Poplawski
2007-02-22 6:47 ` David Miller
2007-02-22 6:45 ` David Miller
2007-02-22 12:14 ` Evgeniy Polyakov [this message]
2007-02-22 13:31 ` David Miller
2007-02-22 13:46 ` Evgeniy Polyakov
2007-02-22 14:08 ` David Miller
2007-02-22 18:24 ` Stephen Hemminger
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20070222121427.GA29455@2ka.mipt.ru \
--to=johnpol@2ka.mipt.ru \
--cc=davem@davemloft.net \
--cc=netdev@vger.kernel.org \
--cc=shemminger@linux-foundation.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).