codice:
	while (flag) {
		if ((bytes=read(sock,buf,512))<0) {
			perror("Impossibile leggere dal socket\n");
			exit(1);
		}
		switch (bytes) {
			case 0 : {
				//Lettura terminata
				flag=0;
				break;
			}
			default : {
				//Controllo della presenza del carattere terminatore tra i dati inviati e stampa dei dati a video
				if (buf[bytes-2]!='\0') {
					//Il carattere non è presente quindi si continua
					buf[bytes-1]='\0';
					write(STDOUT_FILENO,buf,bytes-1);
				}						
				else {
					//Il carattere è presente, si stampa il contenuto del buffer e si modifica la flag
					write(STDOUT_FILENO,buf,bytes-2);
					flag=0;
				}
			}
		}
	}
Questo è il codice che ho usato io per il progetto di sistemi operativi all'università
Testato su Suse Linux 10.0

Come puoi vedere ogni volta che ricevo dati nel buffer tramite la read controllo se nell'ultimo carattere valido è presente il carattere \0. se c'è modifico la flag e interrompo il ciclo, altrimenti mi limito a inserire io il carattere terminatore e stampare il buffer a schermo.

E cosi eviti di usare questa fantomatica readline del tuo prof