Add interface fd to read and error sets, not write set
Setting the timeout to 0 fixes the CPU-usage problem.
Allocating ReadArgs on the heap avoids Racket's stack-switching from corrupting read state