File:  [NetBSD Developer Wiki] / wikisrc / projects / project / pubsub-sockets.mdwn
Revision 1.1: download - view: text, annotated - select for diffs
Mon Feb 16 05:56:51 2015 UTC (7 years, 4 months ago) by dholland
Branches: MAIN
CVS tags: HEAD
Add a project for my publish/subscribe sockets idea.

[[!template id=project

title="Publish-subscribe Unix sockets"

[David Holland](


Add publish-subscribe sockets to AF_UNIX (filesystem sockets).

The idea of a publish-subscribe socket (as opposed to a traditional
socket) is that anything written to one end is read out by _all_
processes reading from the other end.

This raises some issues that need attention; most notably, if a
process doesn't read data sent to it, how long do we wait (or how much
data do we allow to accumulate) before dropping the data or
disconnecting that process?

It seems that one would want to be able to have both SOCK_STREAM and
SOCK_DGRAM publish/subscribe channels, so it isn't entirely clear yet
how best to graft this functionality into the socket API.
Or the socket code.
It might end up needing to be its own thing instead, or needing to
extend the socket API, which would be unfortunate but perhaps

The goal for these sockets is to provide a principled and robust
scheme for passing notices around.
This will allow replacing multiple existing ad hoc callback schemes
(such as for notices of device insertions) and also to allow various
signaling schemes among user processes that have never been very
workable in Unix.
Those who remember AREXX will recognize the potential; but of course
it will take time before anything like that can be orchestrated.

For this reason it's important that it be reasonably easy for one of
the endpoints to be inside the kernel; but it's also important that
peer credentials and permissions work.

Another goal is to be able to use publish/subscribe sockets to provide
a compatibility library for Linux desktop software that wants to use
dbus or any successor to dbus.

I'm marking this project hard as it's still only about half baked.

CVSweb for NetBSD wikisrc <> software: FreeBSD-CVSweb