Hello !
J’ai un petit programme dont le code est ci-dessous et qui me pose quelques problèmes sur le port 25 (smtp).
[code]#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <netdb.h>
#include <netinet/in.h>
#include <unistd.h>
#include <arpa/inet.h>
int main() {
struct sockaddr_in SockLocale;
int sock = socket(AF_INET, SOCK_STREAM, 0);
if(sock==-1) exit(-1);
memset(&SockLocale,0,sizeof(struct sockaddr_in));
SockLocale.sin_family = AF_INET;
SockLocale.sin_addr.s_addr = htonl(INADDR_ANY);
SockLocale.sin_port = htons(25);
if(bind(sock,(struct sockaddr*)&SockLocale,sizeof(struct sockaddr_in)) != -1) {
if(listen(sock, 100)<0) {
printf("Echec de Listen()\n");
exit(-1);
}
}
else {
printf("echec de bind()\n");
exit(-1);
}
while(1) {
struct sockaddr_in SockDistant;
char buffer[512];
socklen_t TailleSock = sizeof(SockDistant);
memset(&SockDistant,0,sizeof(struct sockaddr_in));
int s_distant = accept(sock,(struct sockaddr*)&SockDistant,&TailleSock);
if(s_distant!=-1) {
printf("CONNEXION ETABLIE\r\n");
strcpy(buffer,"Hello world !\r\n");
write(s_distant,buffer,strlen(buffer));
printf("Chaine \"Hello world !\" envoyée\r\n");
close(s_distant);
}
}
}
[/code]
Ce programme fait juste l’envoi de la chaine “Hello world !” et ferme la connexion aussitot. Il affiche en même temps “CONNEXION ETABLIE Chaine “Hello world” envoyée !” coté serveur.
Sur le port 2525 tout marche parfaitement :
Si je fais un telnet à partir de linux sur le port 25, j’obtiens le résultat suivant sur l’écran de la machine sur laquelle tourne le programme :
CONNEXION ETABLIE
Chaine "Hello world" envoyée !
mais le problème survient sur le port 25 (le programme final devra tourner sur le port 25) : Si je fais un telnet depuis Windows, j’obtiens la chaine en double cette fois :
CONNEXION ETABLIE
Chaine "Hello world" envoyée !
CONNEXION ETABLIE
Chaine "Hello world" envoyée !
C’est à dire que windows fait systématiquement 2 connexions consécutives, la première semblant échouer.
Je ne sais pas si le problème vient du code (il ne me semble pas…) ou si ca vient de la configuration linux.
Avez-vous une idée ?