Una funzione di per se è già un puntatore (il cui tipo dipende dal tipo di ritorno e dai parametri che prende.)
La forma corretta (e rindondante) sarebbe (nel tuo caso) &ClientListener, mentre ClientListener è una forma abbreviata. E' quel (void*) che può creare problemi in quanto altera il tipo corretto di puntatore a funzione, in un puntatore a "tutto".
Nel caso della pthread_create probabilmente quell'argomento viene ricastato al tipo originale, ma fare queste assunzioni è pericoloso in quanto le singole implementazoni possono differire.
In generale è sempre meglio evitare i cast rindondandi, lasciando eventualmente che sia il compilatore a protestare. Metterne uno di troppo, rischia di far impazzire il programmatore.