Wait for request from a client process or timeout (and raise NoRequest
exception) if no request arrived within agent.timeout
seconds. On data arrival, pass data item to the callback
function, to build a response, and send the response back to client process.
The callback function is invoked in the following fashion:
callback(req, src) where
req is the data item as sent by client (string) and
src is the endpoint of client connection (given in
socket module notation).
The callback function must return a tuple of (rsp,
dst), where rsp (string) is the data item
to be replied back to client by address dst (given in
socket module notation) or by originating address
if dst is None.