Subject: Re: Creating and using sockets from within the kernel
To: Iain Hibbert <plunky@rya-online.net>
From: None <jonathan@dsg.stanford.edu>
List: tech-kern
Date: 03/07/2006 13:28:04
In message <1141766112.556093.11418.nullmailer@galant.ukfsn.org>,
Iain Hibbert writes:
>I think it is possible to use sockets from within the kernel withouth
>threads, though its not especially obvious and for my work I have not done
>so (though I dont think its going to be too much work to change, should
>that be necessary)
Ahem. For one example, see kcont(9) and my old patch which implement
splice(2) on top of kcont(9).
>You can use NULL for the process pointer, and set SS_NBIO so that it never
>sleeps then make sure you never send more than it can take or try to read
>more than is available. Then, if you want to receive wakeup notifications
>set so_upcall/so_upcallarg fields in the socket and set SB_UPCALL in the
>relevant sockbuf.
>
>I think, anyway.
Creating sockets may require more thought. Creation of, or binding to,
Unix-domain sockets, for example, require a non-NULL rootvp against
which to resolve the pathname of the socket. ANd I _think_ that
rootvp is acquired via a process pointer, but I haven't looked
carefully since before scheduler activations and lwps.
All quite doable, but could be made rather cleaner with little effort.