The read event demultiplexer select(2) on Unix FDs ... Fill up AX.25 interface packet buffers ... Decode as many packets as possible on each interface ... Fill up buffers for pending caller reads, open new connections ... If: * ax25_select() is called: Notify caller of I/O events * ax25_read() is called: Provide caller access to requested buffer region Buffer may be discarded upon next ax25_read() event, but should not be discarded after an ax25_select() necessarily. Most crucially: This sequence of events is triggered by ANY of the I/O calls, so as to facilitate the same sort of behaviors that one would expect when letting a kernel thread be responsible for all this activity from a userland process' perspective. The main difference in behavior in any of these calls is the result provided to the caller.