Красиво и в полном соответствии с OTP это не делается. Для чего так сделано - не знаю.
Надо стартовать один или несколько отдельных процессов (не по OTP), в которых вызвать gen_tcp:accept(Socket). Эта функция вернет клиенский сокет после подключения к нему кого-либо. ? вот уже с этим сокетом можно запустить новый gen_server для обмена данными, либо отдать их обратно в тот gen_server, из которого создавались accept-процессы.
Есть еще недокументированный способ - через модуль prim_inet. Он позволяет сделать асинхронное оповещение об accept, которое хоро?о встраивается в gen_server. Но все-таки это не официальный способ.. и по идее может быть прикрыт в следующих релизах erts.