An alternative to `unsafe-replace`-evt` is to create a new thread (using `thread/suspend-to-kill`) to manage the socket. The thread would wait on the "maybe ready to accept" event, use the polling operation to actually receive a connection if possible, and then serve a received connection out through a channel. The event-based version of accept would use `guard-evt` and `thread-resume` for kill safety to make sure that the manager thread has the right to run.
An advantage of `unsafe-replace-evt` is that it can work with multiple references (possibly in different places) to the underlying socket, since unreceived connections stay in the socket instead of the manager thread. If there are no other references to the socket – that is, if you can move into the CML world early enough – than CML provides the needed building blocks.