Ciao a tutti.

Sto scrivendo un programma in C che mi permetta di comunicare con un server POP3 con il fine di ottenere il numero di E-mail presenti su quest'ultimo. Visto che sono alle prime armi mi sono limitato a testare per lo meno la gestione dei messaggi con il server POP3 in particolare cerco di autenticarmi con i comandi "user ..." e "pass ...".
Il problema è che quando invio il comando "user <mio nome utente>" il server mi restituisce la stringa "-ERR Protocol error."

Vi posto il codice:
codice:
#include <sys/types.h>   /* predefined types */
#include <unistd.h>      /* include unix standard library */
#include <arpa/inet.h>   /* IP addresses conversion utilites */
#include <sys/socket.h>  /* socket library */
#include <stdio.h>	 /* include standard I/O library */
#include <string.h>
#include <stdlib.h>
#include <errno.h>

void ComPop3(FILE * filein, int socket);

/* Variables and costants definition */
    #define MAXLINE 256
    int sock_fd, i;
    struct sockaddr_in serv_add;

/* Main program begin */
int main(int argc, char *argv[])
{
    /* create socket */
    if ( (sock_fd = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
	perror("Socket creation error");
	return 1;
    }
    /* initialize address */
    memset((void *) &serv_add, 0, sizeof(serv_add)); /* clear server address */
    serv_add.sin_family = AF_INET;                   /* address type is INET */
    serv_add.sin_port = htons(110);                    /* 110 da pop3 protocol */
    /* build address using inet_pton */
    if ( (inet_pton(AF_INET, argv[optind], &serv_add.sin_addr)) <= 0) { /* ottengo l'indirizzo del server, che viene fornito come argomento */
	perror("Address creation error");				/* Il server deve essere in formato dotted decimal */
	return 1;
    }
    /* extablish connection */
    if (connect(sock_fd, (struct sockaddr *)&serv_add, sizeof(serv_add)) < 0) {
	perror("Connection error");
	return 1;
    }
    /* avvia funzione di comunicazione con il server */
    ComPop3(stdin, sock_fd);	
    return 0;
}

/* funzione di comunicazione con il server */
void ComPop3(FILE * filein, int socket) 
{
    /* Local variables definition */
    char sendbuff[MAXLINE+1], recvbuff[MAXLINE+1];
    int nread,nwrite; 
    nread = read(socket, recvbuff, sizeof(recvbuff)); //sizeof: per leggere fino alla fine
    recvbuff[nread] = 0;
    fputs(recvbuff, stdout);
    
    fgets(sendbuff, MAXLINE, filein);
    nwrite= send(socket, sendbuff, strlen(sendbuff), 0);   
    if (nwrite < 0) {
        fputs("errore nella trasmissione\n", stdout);
    }
    if (nwrite == 0) {
        fputs("messaggio vuoto\n", stdout);
    }
    if (nwrite > 0) {
        fputs("inviato messaggio\n", stdout);
    }    
   
    nread= recv(socket, recvbuff, sizeof(recvbuff), 0);
    recvbuff[nread] = 0;
    fputs(recvbuff, stdout);
}
La parte che sicuramente necessita di qualche correzione è la segiente:

codice:
/* funzione di comunicazione con il server */
void ComPop3(FILE * filein, int socket) 
{
    /* Local variables definition */
    char sendbuff[MAXLINE+1], recvbuff[MAXLINE+1];
    int nread,nwrite; 
    nread = read(socket, recvbuff, sizeof(recvbuff)); //sizeof: per leggere fino alla fine
    recvbuff[nread] = 0;
    fputs(recvbuff, stdout);
    
    fgets(sendbuff, MAXLINE, filein);
    nwrite= send(socket, sendbuff, strlen(sendbuff), 0);   
    if (nwrite < 0) {
        fputs("errore nella trasmissione\n", stdout);
    }
    if (nwrite == 0) {
        fputs("messaggio vuoto\n", stdout);
    }
    if (nwrite > 0) {
        fputs("inviato messaggio\n", stdout);
    }    
   
    nread= recv(socket, recvbuff, sizeof(recvbuff), 0);
    recvbuff[nread] = 0;
    fputs(recvbuff, stdout);
}
Sapete dirmi cosa sbaglio? Ho letto sulle specifiche del protocollo POP3 che ogni comunicazione da client a server deve terminare con \n\r, ma come faccio a inserirlo?