razuki | D'accord. Voici grosso modo la fonction xconnect qui fait appel éventuellement à bind( ), puis à connect( ) de l'OS. xconnect( ) permet à l' appli client de se connecter au serveur.
Code :
- int xconnect(uint32_t daddr, unsigned short dport, uint32_t *saddr, unsigned short *sport, int proto, int stp0)
- si->src.sin_family = AF_INET;
- si->src.sin_addr.s_addr = *saddr;
- si->src.sin_port = htons(localPort);
- si->dst.sin_family = AF_INET;
- si->dst.sin_addr.s_addr = daddr;
- si->dst.sin_port = htons(dport);
- if ((*saddr || *sport) && (stp != sipdgram) ) {
- if (::bind(sock, (sockaddr *)&si->src, sizeof(si->src))) {
- err = sockerrno();
- log(ERROR, "bind error: %s", sockstrerror(err));
- goto osfail;
- }
- }
- if (isstream(si->stype) && connect(sock, (sockaddr *)&si->dst, sizeof(si->dst))) {
- // traitement erreur
- }
|
ce que je n'ai pas compris : mais quand est ce qu'on spécifie comme suit ( cad sans bind ) ? :
Code :
- serv_addr.sin_family = AF_INET ;
- serv_addr.sin_addr.s_addr = inet_addr (IP) ;
- serv_addr.sin_port = htons (PORT) ;
- memset (&serv_addr.sin_zero, 0, sizeof(serv_addr.sin_zero));
- s_cli = socket (PF_INET, SOCK_STREAM, 0) ;
- err = connect (s_cli, (struct sockaddr *)&serv_addr, sizeof serv_addr) ;
|
là aussi on spécifie l'adresse source pour l'émission : IP et le port source : PORT (qui est défini en macro plus haut ..) Message édité par razuki le 10-02-2011 à 14:09:24
|