All of lore.kernel.org
 help / color / mirror / Atom feed
From: Paolo Ornati <ornati@fastwebnet.it>
To: "Theodore Ts'o" <tytso@mit.edu>
Cc: Linux Kernel Mailing List <linux-kernel@vger.kernel.org>
Subject: Re: Lack of Documentation about SA_RESTART...
Date: Tue, 12 Jul 2005 17:25:04 +0200	[thread overview]
Message-ID: <20050712172504.1216a174@localhost> (raw)
In-Reply-To: <20050712120456.GA14032@thunk.org>

On Tue, 12 Jul 2005 08:04:56 -0400
Theodore Ts'o <tytso@mit.edu> wrote:

> > 
> > The logically correct behaviur with blocking connect interrupted and
> > then restarted should be to continue the blocking wait... IHMO.
> 
> I was looking at what happened with a *non-blocking* connect
> interrupted by an SA_RESTART signal.  Since it is non-blocking, it
> will never continue with the wait.  The only question is whether it
> should return with an EINTR (which is what it currently does) or
> return with whatever error code it would have returned if the signal
> had not been delievered in the first place.  We currently do the
> former; a close reading of the spec seems the require the latter.
> Fortunately this is a pretty narrow race condition since the chances
> of a signal being delivered right in the middle of a non-blocking
> connect are small.

Hmmm... no, no. A connect() on non-blocking socket will NEVER return
EINTR. SUSV3 and Linux code agree.

A syscall isn't magically interrupted if a signal arrives... it's the
syscall that must check for pending signals and do the proper action
(usually it will return with -EINTR or -ERESTARTSYS).

A connect() on a blocking socket is something like this (very
approssimative):

	1) code to activate the connection
	2) sleep waiting for something (connection ready / signal received...)
	3) if connection is ready then return 0, else if there are pending
	signals return -ERESTARTSYS

With non-blocking socket the syscall never sleeps, and never checks for
pending signals.

Look at "net/ipv4/af_inet.c": in particular at "net_wait_for_connect"
and its usage in "inet_stream_connect".

--
	Paolo Ornati
	Linux 2.6.12.2 on x86_64

  reply	other threads:[~2005-07-12 15:26 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-07-11 10:32 Lack of Documentation about SA_RESTART Paolo Ornati
2005-07-11 14:34 ` Theodore Ts'o
2005-07-12  3:30   ` Philippe Troin
2005-07-12  8:43     ` Paolo Ornati
2005-07-12  8:38   ` Paolo Ornati
2005-07-12 10:10     ` Paolo Ornati
2005-07-12 12:04     ` Theodore Ts'o
2005-07-12 15:25       ` Paolo Ornati [this message]
2005-07-12 18:16         ` Theodore Ts'o
2005-07-13  7:45           ` Paolo Ornati
2005-07-24  0:30   ` Linus Torvalds
2005-07-24  7:28     ` Paolo Ornati
2005-07-24 14:56     ` Theodore Ts'o
2005-07-25  8:02       ` Paolo Ornati

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=20050712172504.1216a174@localhost \
    --to=ornati@fastwebnet.it \
    --cc=linux-kernel@vger.kernel.org \
    --cc=tytso@mit.edu \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.