fichtre, ça m'a tellement rappelé ma jeunesse que j'ai regardé, bien que ce soit une histoire de c et pas d'asterisk

pour moi, ca tilte sur la ligne
if ((taille=='\0')||(recv==-1)) break;

taille est un entier
'\0' est une chaine de caracteres, vide - implicitement, donc, dans cette ligne, tu as un pointeur vers une chaine de caracteres vides (il n'y a pas d'objet chaine/string en c de mémoire, que des caracteres)

si tu mets:
if ((taille==0)||(recv==-1)) break;

bon, mais c'est pas ca.... ah... je vieillis !

en fait, recv est une fonction, -1 une constante, donc, en mettant le nom de la fonction sans (), tu obtiens un pointeur vers cette fonction - et la, j'ai pas de solution, car je comprends pas ce que tu veux faire

en virant le recv==-1, ca compile, meme avec le '\0', mais si tu le laisses, je sais pas la logique qui fait que ca marche