From: Ian Stirling <ian.stirling@mauve.plus.com>
To: Rob Landley <rob@landley.net>
Cc: "Pavel Machek" <pavel@ucw.cz>,
"Jörn Engel" <joern@wohnheim.fh-wedel.de>,
linux-kernel@vger.kernel.org
Subject: Re: [ANNOUNCEMENT PATCH COW] proof of concept impementation of cowlinks
Date: Wed, 26 May 2004 01:16:31 +0100 [thread overview]
Message-ID: <40B3E1DF.10001@mauve.plus.com> (raw)
In-Reply-To: <200405251816.05497.rob@landley.net>
Rob Landley wrote:
> On Tuesday 25 May 2004 17:08, Pavel Machek wrote:
>
>
>>>Doesn't asynchronous sendfile has the little problem your process can
>>>exit before the sendfile is complete?
>>
>>Hmm, it has...
>>
>>
>>>I'm not sure how much of a help it really is, since fork() isn't brain
>>>surgery if you want it to be asynchronous, and the lifetime rules are
>>>really explicit then. (With a ps that does thread grouping, this isn't
>>>too bad from a clutter standpoint, even. And you automatically get a
>>>SIGCHLD when the sendfile is complete, too...)
>>
>>Right.
>>
>>
>>>Of course if the syscall can make the sendfile outlive the process that
>>>fired it off, then by all means it sounds good. I dunno how much extra
>>>work that is for the kernel, though.
>>
>>Well, it would be "interesting" to stop that sendfile then. You could
>>not kill it etc.
>
>
> Well, logically what you're doing is redirecting an existing filehandle so it
> points to something else. Instead of reading from this pipe, you're now
> reading from this file or from this network socket, or this other process's
> stdout. So any intermediate processes going away is theoretically okay as
> long as the anchors at each end remain (process/filesystem/network connection
> generating the data, process/filesystem/network connection receiving the
> data).
>
> The easy way to make the semantics work out right is that such an asynchronous
> sendfile would effectively close the file in question from the point of view
> of the process that did the sendfile. It would pretty much have to be part
> of the semantics of any asynchronous sendfile call: welding together the two
> filehandles would behave like a single direction shutdown(2) as far as the
> process that called sendfile is concerned. (That way, if you do an async
> sendfile in each direction, the filehandle is closed both ways, but you don't
> HAVE to if you don't want to. You can feed data to a child process from a
> script file or something, and just deal with the responses coming back.)
>
> This would mean that in theory the process that did the sendfile could go away
> without too much ambiguity about what should happen. (The bits that are
> already closed from the process's point of view are unaffected by the process
> exiting.) I dunno what's needed to clean that up in the kernel.
>
> I also don't know if it's a good idea, because as you noticed the fire and
> forget nature of the thing means that killing it afterwards is something we
> haven't got a semantic for if the thing at the other end is NOT a pipe to a
> processes. (We kill processes. We don't have a kill for network connections
> or for files in the filesystem that are no longer associated with any
> process. This is theoretically existing problem, by the way. Check out
> SO_LINGER in man 7 socket...)
>
A while back (2.2?) I was using a util that came with netpipes, sockdown.
Give it a socket FD, and it would close the socket.
It wasn't intended for it, but I found that it was really handy to
be able to shut other programs network connections.
For example, tin gets wedged talking to a server that won't do something, and
you just do
sockdown </proc/tin/fd/nn
And it shuts.
Mildly annoyingly, this stopped working in 2.4.
I suppose it'd be totally insane for init to inherit descriptors for open network
connections.
next prev parent reply other threads:[~2004-05-26 0:17 UTC|newest]
Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-05-06 13:17 [ANNOUNCEMENT PATCH COW] proof of concept impementation of cowlinks Jörn Engel
2004-05-06 13:18 ` [PATCH COW] generic_sendpage Jörn Engel
2004-05-06 13:19 ` [PATCH COW] sendfile Jörn Engel
2004-05-06 13:19 ` [PATCH COW] copyfile Jörn Engel
2004-05-06 13:20 ` [PATCH COW] lock_flags Jörn Engel
2004-05-06 13:21 ` [PATCH COW] MAD COW Jörn Engel
2004-05-08 13:45 ` [ANNOUNCEMENT PATCH COW] proof of concept impementation of cowlinks Denis Vlasenko
2004-05-08 22:10 ` Pavel Machek
2004-05-09 14:09 ` Denis Vlasenko
2004-05-09 21:53 ` Pavel Machek
2004-05-10 15:44 ` Jörn Engel
2004-05-10 15:51 ` Pavel Machek
2004-05-10 15:56 ` Jörn Engel
2004-05-12 0:26 ` Jamie Lokier
2004-05-13 10:56 ` Jörn Engel
2004-05-12 20:29 ` Rob Landley
2004-05-08 22:48 ` Pavel Machek
2004-05-10 15:53 ` Jörn Engel
2004-05-10 19:26 ` Jan Harkes
2004-05-11 10:02 ` Jörn Engel
2004-05-11 14:08 ` Jan Harkes
2004-05-11 14:18 ` Jan Harkes
2004-05-11 14:33 ` Jörn Engel
2004-05-21 23:23 ` Rob Landley
2004-05-25 22:46 ` Jan Harkes
2004-05-11 15:40 ` Steve French
2004-05-11 15:58 ` Jörn Engel
2004-05-10 5:15 ` Eric W. Biederman
2004-05-10 15:59 ` Jörn Engel
2004-05-12 16:39 ` Rob Landley
2004-05-20 13:49 ` Pavel Machek
2004-05-25 21:55 ` Rob Landley
2004-05-25 22:08 ` Pavel Machek
2004-05-25 23:16 ` Rob Landley
2004-05-26 0:16 ` Ian Stirling [this message]
2004-05-26 9:52 ` Jörn Engel
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=40B3E1DF.10001@mauve.plus.com \
--to=ian.stirling@mauve.plus.com \
--cc=joern@wohnheim.fh-wedel.de \
--cc=linux-kernel@vger.kernel.org \
--cc=pavel@ucw.cz \
--cc=rob@landley.net \
/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.