don't override empty opts.port