Are you getting WANT_READ or WANT_WRITE? That is common for non-blocking. And also, yeah, way back when, it was common to return zero when read on a non-blocking socket had no data :) And what release are you using?