I'm currently working on similar code.. Instead of using Win32::Daemon, I just have a script that runs in a while loop.
It's not the cleanest thing in the world, but I can have a "daemon" running and processing messages as necessary.
I know that SOAP::Lite can be run as a daemon..
my $daemon = SOAP::Transport::HTTP::Daemon
-> new (LocalAddr => '207.000.000.000', LocalPort => 80)
-> dispatch_to('_Whatever')
That processes under sigint properly. It's what I'm using.
The package it dispatches to is internal. All it has is two subroutines.
One for stuffing messages into a table.
One for picking them out of an outgoing messages table.
The "deamon" mentioned above does the work of running under the while loop and grabbing the messages out of the db.
It's not much, but it's just my two cents. I hope I could offer at least a view of what somebody else is trying out.