This commit fixes a bug where, retry after timeout would send another
request, but wouldn't discard a response that arrived after the timeout.
Retries worked, but only for dropped packets. If a response arrived, but
`socker.recvfrom` timed out, response would still be put in receive
queue. Later after sending another request, client would try to read
from the socket and would find a response. But this response would be
for the old request.
This way request/response pairs would get misaligned and stop working
properly.
This commit adds read numbering (writes do not have responses).
Numbering is achieved by utilizing the fact that responses to Etherbone
reads are actually writes to an address specified in a request.
This way, we don't need to extend Etherbone protocol, in fact we use it
as it is intended.
This numbering is then used to discard responses that don't match
current request.
I also cleaned setting of the timeout, as it was being set in multiple
places, sometimes to values so small that retry was bound to happen.
Signed-off-by: Michal Sieron <msieron@antmicro.com>