hello. I may be missing something in your curses non-blocking case, but can't you work around the issue by setting up an independent file descriptor, and hence tty structure, by performing a dup2(2) on stdin and then closing the original stdin file descriptor? Then, of course, you can dup(2) the newly opened file descriptor back into the stdin position for purposes of your program.
Just a thought; I haven't tried it. -thanks -Brian