better non-blocking support for protocols