Not sure if this it the case but in current R3 you have to wait on the port that operates on the real connection (usually tcp scheme). If you wait on the 'topmost' port used by some higher-level scheme the real 'connection port' will be awaken but not the 'topmost' one. To solve this annoyance, we probably need to introduce new field to the port object (like port/parent-port) using which the AWAKE handler can find the top-most port easily and resolve correctly waiting on higher-level scheme wrappers.
I'd like to use the term socket to indicate the real tcp-level port to ease the terminology confusion here. And yes, the ftp protocol does do a wait on the socket. It works fine in other OS, just not Android according to Luis' tests.