handle TCP and UDP simultaneously. UDP packets in separate go routines