socket_readable() returns TRUE if recv() will not block if called on the specified socket. socket_writable() returns TRUE if send() will not block if called on the specified socket. socket_recvdone() returns TRUE if all data has been recv()ed an the socket is closed. "will not block" includes "will return an error". This matches the three main use-cases for select() of a single socket in Synchronet. Use them in the SyncTERM RLogin stuff so they can be tested easily.