When I needed this kind of functionality (transferring hardware events to user space) I simply made a kernel driver for a /dev/pulse character special device (Major device 10, minor device selected from 240-255 "Reserved for local use"). It wasn't hard to grab code from the Rubini book and drivers/char/nwbutton.c and make something that works. Sounds simpler than inventing a whole new socket family.
- Larry