only add a listener once per connection