I took out the code that throws away duplicate packets on purpose: it
only complicates the normal TCP path of control, and it's useless anyway
(as you suspected). Duplicate packets are later removed when we read the
TCP data, or in the special "prune_queue()" (or whatever I called it)
function that is called only if we notice that the receive queue has grown
too much (ie never, under normal circumstances).