Can you try removing the "SIO_ready()" call to see if things start working? The code looks correct as it is written, but the code should also work without the SIO_ready() call since the caller will wait for the I/O in SIO_reclaim().
The SIO_ready() call isn't really necessary in the code above.
I'm concerned that the I/O will not start until the first call to SIO_reclaim() which will call down into the driver.
Thanks,
-Karl-