Forum Programmation.c connect() sur une socket

Posté par  .
Étiquettes : aucune
0
9
oct.
2004
Bonjour,

alors voila, j'ai un programme qui ouvre une socket, comme ça :


#define SOCK "./masocket"
int fd,len;
struct sockaddr_un sa;
char buf[]="hello";
fd = socket(PF_UNIX, SOCK_STREAM, 0);
len=sizeof(sa);
sa.sun_family=AF_UNIX;
strcpy(sa.sun_path,SOCK);
bind(fd,(struct sockaddr *)&sa,len)
listen(fd,5);
connect(fd,(struct sockaddr *)&sa,len);


Après compilation, connect() me renvoie un EINVAL (Invalid argument), alors que si je le supprime dans ce programme, et que j'en crée un second séparé qui fait le connect() (il fait tout pareil, sauf connect() à la place de listen(), un client quoi), ça fonctionne (pas de EINVAL chez le client).

la question est simple et évidente : pourquoi je peut pas tout faire (listen puis connect) dans un seul programme ? Je sais, ça ne servirait à rien, mais quand même.
  • # Ben...

    Posté par  . Évalué à 5.

    Ton socket fd est deja connecte a travers listen

    Resultat, ton connect prend un socket qui est deja connecte et essaie de le connecter de nouveau --> BOUM !
  • # Commentaire supprimé

    Posté par  . Évalué à 7.

    Ce commentaire a été supprimé par l’équipe de modération.

    • [^] # Re: connect() sur une socket

      Posté par  . Évalué à 1.

      Donc, si j'ai pien compris le EINVAL viendrais du fait que j'utilise la meme socket (sa) pour faire listen et connect, ce qui est assez logique finalement; aprés une bonne nuit de sommeil...

      Merci en tout cas !

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.