If you're developing non-blocking applications, you have to deal with events.
    int ZOOM_event(int no, ZOOM_connection *cs);
   
    The ZOOM_event executes pending events for
    a number of connections. Supply the number of connections in
    no and an array of connections in
    cs (cs[0] ... cs[no-1]).
    A pending event could be a sending a search, receiving a response,
    etc.
    When an event has occurred for one of the connections, this function
    returns a positive integer n denoting that an event
    occurred for connection cs[n-1].
    When no events are pending for the connections, a value of zero is
    returned.
    To ensure that all outstanding requests are performed call this function
    repeatedly until zero is returned.
   
    If ZOOM_event returns and returns non-zero, the
    last event that occurred can be expected.
   
    int ZOOM_connection_last_event(ZOOM_connection cs);
   
    ZOOM_connection_last_event returns an event type
    (integer) for the last event.
   
Table 3.10. ZOOM Event IDs
| Event | Description | 
|---|---|
| ZOOM_EVENT_NONE | No event has occurred | 
| ZOOM_EVENT_CONNECT | TCP/IP connect has initiated | 
| ZOOM_EVENT_SEND_DATA | Data has been transmitted (sending) | 
| ZOOM_EVENT_RECV_DATA | Data has been received) | 
| ZOOM_EVENT_TIMEOUT | Timeout | 
| ZOOM_EVENT_UNKNOWN | Unknown event | 
| ZOOM_EVENT_SEND_APDU | An APDU has been transmitted (sending) | 
| ZOOM_EVENT_RECV_APDU | An APDU has been received | 
| ZOOM_EVENT_RECV_RECORD | A result-set record has been received | 
| ZOOM_EVENT_RECV_SEARCH | A search result been received |