mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: "David Schwartz" <davids@webmaster.com>
To: <linux-kernel@vger.kernel.org>
Subject: RE: SELECT() returns 1 But FIONREAD says (Input/output error)
Date: Thu, 31 May 2007 18:01:31 -0700	[thread overview]
Message-ID: <MDEHLPKNGKAHNMBLJOLKCENHEDAC.davids@webmaster.com> (raw)
In-Reply-To: <465F112C.6090409@gatworks.com>


> i am using the GARMIN_GPS/usb driver to read a gps receiver.
> In testing the ability of my software to recover from various errors, I
> try this: unplug the gps/USB cable from the usb hub.
>
> Interestingly enough the thread spins.
> the SELECT() waits for something to happen, and I get one channel that
> something interesting happened.
> Then i try to find out how many chars are in the read buff via FIONREAD.
> That call errors out with an i/o error.
>
> Needless to day, the code resets the SELECT parameters, and SELECT is
> called again. It again says that something interesting has happened on
> that ( i/o errored ) channel. And we now repeat the  FIONREAD.
>
> In this case what, will reset the "something interesting has happened"
> report from the SELECT call? Will it ever be reset in this case?

Nope. An errored connection is always ready for read/write -- there is
nothing to wait for as far as the kernel is concerned. Your code keeps
asking the kernel if something interesting has happened, the kernel keeps
telling it yes, and it refuses to do anything about it.

At minimum, a detection of an error condition that could be persistent
should be followed by a delay. A detection of an error condition that has in
fact persisted and was previously detected should *never* be followed by an
immediate return to 'select'.

You need to *handle* the I/O error. Backoff might be one way, sleeping for
an increasing amount of time after each fatal error, subject to some limit.

And why are you calling FIONREAD? Just 'read' the data -- you're going to
have to eventually anyway.

DS



  reply	other threads:[~2007-06-01  1:02 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-05-31 18:17 Uncle George
2007-06-01  1:01 ` David Schwartz [this message]
2007-06-01  1:53   ` Uncle George
2007-06-01 16:43     ` David Schwartz
2007-06-01 17:07       ` Uncle George
2007-06-01 17:33         ` David Schwartz
2007-06-01 20:04           ` Uncle George
2007-06-01 22:03             ` David Schwartz
2007-06-01 12:01   ` Uncle George
     [not found] <fa.qaWJQn9l1jDV+N9wFv9WqATf44U@ifi.uio.no>
     [not found] ` <fa.pq45zUHWQMSHoRGL/M4uTPfFWHg@ifi.uio.no>
2007-06-01  2:48   ` Robert Hancock
2007-06-02  0:02     ` Uncle George
     [not found] <8qXzx-jY-31@gated-at.bofh.it>
2007-06-01 12:19 ` Bodo Eggert

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=MDEHLPKNGKAHNMBLJOLKCENHEDAC.davids@webmaster.com \
    --to=davids@webmaster.com \
    --cc=linux-kernel@vger.kernel.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

Powered by JetHome