startListening() must be manually called.