In the SuS description of poll(), it says that POLLOUT means "Normal data may be written without blocking."  However it does not say how much data.  It is unexpected that a write() call would block instead of returning a short count; for example, if you feed it a 2G buffer, it could return 4096 indicating that only 4k of the 2G was actually written.