Manugal
14-02-2010, 17:05
Ciao a tutti!
Sto sviluppando un mail server. Facendo la recv() su un socket, questa si comporta in modo strano. Questo è il codice della funzione (eseguita in un thread separato):
void SMTPCommands(THRD_PARAMS *tArgs)
{
....
int iResult;
SMTPSession *session=(SMTPSession *)malloc(sizeof(SMTPSession));
memset(session->request,0,sizeof(session->request));
while (!flagsGuard.ShutDown){
printf("Waiting for SMTP request...\n");
iResult=recv(tArgs->SMTPSocket,session->request,MAX_REQ_SIZE,0); // MAX_REQ_SIZE = 512
....
Succede che quando vado a interrogare il server tramite Telnet (RAW) sulla porta 25 di SMTP, inviando ad esempio il comando HELO, su session->request non mi ritrovo HELO\r\n (come mi aspetto), ma solo HELO e se faccio un'altra chiamata a recv() subito dopo questa allora mi legge il CRLF. Non capisco perché non lo legge tutto con un'unica recv().
Sto sviluppando un mail server. Facendo la recv() su un socket, questa si comporta in modo strano. Questo è il codice della funzione (eseguita in un thread separato):
void SMTPCommands(THRD_PARAMS *tArgs)
{
....
int iResult;
SMTPSession *session=(SMTPSession *)malloc(sizeof(SMTPSession));
memset(session->request,0,sizeof(session->request));
while (!flagsGuard.ShutDown){
printf("Waiting for SMTP request...\n");
iResult=recv(tArgs->SMTPSocket,session->request,MAX_REQ_SIZE,0); // MAX_REQ_SIZE = 512
....
Succede che quando vado a interrogare il server tramite Telnet (RAW) sulla porta 25 di SMTP, inviando ad esempio il comando HELO, su session->request non mi ritrovo HELO\r\n (come mi aspetto), ma solo HELO e se faccio un'altra chiamata a recv() subito dopo questa allora mi legge il CRLF. Non capisco perché non lo legge tutto con un'unica recv().