12/09/12 9:31
ulysses
Ho fatto un client che scambia messaggi con un server (tipo telnet, insomma, un client molto semplice) e quando comunico con smtp.gmail.com, se gli scrivo il comando "Mail from <mioindirizzodiposta>", il client mi restituisce un errore alquanto strano. Credo di aver fatto casino con qualche puntatore (non sono abile a maneggiarli )
Eccovi il codice del client...
(errori.h è una mia libreria per gestire rapidamente gli errori, non credo abbia nulla a che fare con l'errore)
Ed ecco in atto la comunicazione tra me e gmail...
Eccovi il codice del client...
#include <stdio.h> #include <sys/socket.h> #include <arpa/inet.h> #include <netinet/in.h> #include <string.h> #include <sys/types.h> #include <netdb.h> #include "errori.h" #include <unistd.h> int send_b(int socket, char *buffer){ int sb, bts; bts = strlen(buffer); while(bts > 0){ sb = send(socket, buffer, bts, 0); if(sb == 0) return 1; // Ciclo finito bts -= sb; buffer += sb; } return 0; } int main(){ int sock; struct sockaddr_in sock_h; struct hostent *host; host = gethostbyname("smtp.gmail.com"); //Creo socket if( (sock = socket(AF_INET, SOCK_STREAM, 0)) == -1) serrore("Creazione socket fallita.", sock); //Connessione sock_h.sin_family = AF_INET; sock_h.sin_port = htons(587); sock_h.sin_addr = *(struct in_addr *)host->h_addr; printf("Connessione in corso..."); if( connect(sock, (struct sockaddr *)&sock_h, sizeof(struct sockaddr) ) == -1) serrore("Connessione socket fallita.", sock); printf("CONNESSO\n"); //Invio messaggi char *rsp = (char*)malloc(1024); int x; while (1){ x = recv(sock, rsp, 10000, 0); if(x == 0 || x == -1) serrore("Ricezione fallita. Chiusura.", sock); printf("\nSERVER #=> %s\n\n", rsp); char *msg = (char *)malloc(1024); printf("CLIENT #=> "); fgets(msg, 1024, stdin); send_b(sock, msg); free(msg); free(rsp); } shutdown(sock, 2); return 0; }
(errori.h è una mia libreria per gestire rapidamente gli errori, non credo abbia nulla a che fare con l'errore)
Ed ecco in atto la comunicazione tra me e gmail...
Connessione in corso...CONNESSO SERVER #=> 220 mx.google.com ESMTP w7sm7203886wiz.0 CLIENT #=> helo SERVER #=> 250 mx.google.com at your service wiz.0 CLIENT #=> mail from <ulysses.diamadis@gmail.com> *** glibc detected *** ./gclient: double free or corruption (top): 0x09ff07b8 *** ======= Backtrace: ========= /lib/i386-linux-gnu/libc.so.6(+0x73e42)[0xb75ebe42] ./gclient[0x80488c6] /lib/i386-linux-gnu/libc.so.6(__libc_start_main+0xf3)[0xb75914d3] ./gclient[0x80485b1] ======= Memory map: ======== 08048000-08049000 r-xp 00000000 08:07 8388723 /home/ulysses/Documenti/Progetti/Prove/gclient 08049000-0804a000 r--p 00000000 08:07 8388723 /home/ulysses/Documenti/Progetti/Prove/gclient 0804a000-0804b000 rw-p 00001000 08:07 8388723 /home/ulysses/Documenti/Progetti/Prove/gclient 09fef000-0a010000 rw-p 00000000 00:00 0 [heap] b7518000-b7534000 r-xp 00000000 08:07 4719540 /lib/i386-linux-gnu/libgcc_s.so.1 b7534000-b7535000 r--p 0001b000 08:07 4719540 /lib/i386-linux-gnu/libgcc_s.so.1 b7535000-b7536000 rw-p 0001c000 08:07 4719540 /lib/i386-linux-gnu/libgcc_s.so.1 b7547000-b755a000 r-xp 00000000 08:07 4719603 /lib/i386-linux-gnu/libresolv-2.15.so b755a000-b755b000 ---p 00013000 08:07 4719603 /lib/i386-linux-gnu/libresolv-2.15.so b755b000-b755c000 r--p 00013000 08:07 4719603 /lib/i386-linux-gnu/libresolv-2.15.so b755c000-b755d000 rw-p 00014000 08:07 4719603 /lib/i386-linux-gnu/libresolv-2.15.so b755d000-b755f000 rw-p 00000000 00:00 0 b755f000-b7564000 r-xp 00000000 08:07 4719568 /lib/i386-linux-gnu/libnss_dns-2.15.so b7564000-b7565000 r--p 00004000 08:07 4719568 /lib/i386-linux-gnu/libnss_dns-2.15.so b7565000-b7566000 rw-p 00005000 08:07 4719568 /lib/i386-linux-gnu/libnss_dns-2.15.so b7566000-b7568000 r-xp 00000000 08:07 4718647 /lib/libnss_mdns4_minimal.so.2 b7568000-b7569000 r--p 00001000 08:07 4718647 /lib/libnss_mdns4_minimal.so.2 b7569000-b756a000 rw-p 00002000 08:07 4718647 /lib/libnss_mdns4_minimal.so.2 b756a000-b7575000 r-xp 00000000 08:07 4719570 /lib/i386-linux-gnu/libnss_files-2.15.so b7575000-b7576000 r--p 0000a000 08:07 4719570 /lib/i386-linux-gnu/libnss_files-2.15.so b7576000-b7577000 rw-p 0000b000 08:07 4719570 /lib/i386-linux-gnu/libnss_files-2.15.so b7577000-b7578000 rw-p 00000000 00:00 0 b7578000-b7717000 r-xp 00000000 08:07 4719519 /lib/i386-linux-gnu/libc-2.15.so b7717000-b7719000 r--p 0019f000 08:07 4719519 /lib/i386-linux-gnu/libc-2.15.so b7719000-b771a000 rw-p 001a1000 08:07 4719519 /lib/i386-linux-gnu/libc-2.15.so b771a000-b771d000 rw-p 00000000 00:00 0 b772b000-b7730000 rw-p 00000000 00:00 0 b7730000-b7731000 r-xp 00000000 00:00 0 [vdso] b7731000-b7751000 r-xp 00000000 08:07 4719499 /lib/i386-linux-gnu/ld-2.15.so b7751000-b7752000 r--p 0001f000 08:07 4719499 /lib/i386-linux-gnu/ld-2.15.so b7752000-b7753000 rw-p 00020000 08:07 4719499 /lib/i386-linux-gnu/ld-2.15.so bfe1c000-bfe3d000 rw-p 00000000 00:00 0 [stack] Aborted (core dumped)
aaa