Voici l'affaire, j'écris un simple serveur de socket tcp en C (avec des appels système Unix) que je ne suis pas en mesure d'accepter les connexions. D'après ce que je peux dire, je passe très bien l'initialisation du serveur, mais quand j'essaie de me connecter au port que j'imprime (voir le code ci-dessous), il refuse comme si rien n'était là. Plus précisément, quand je netstat ce port n'est même pas utilisé. Je ne jette aucune erreur avec ma configuration actuelle, je suis tout desséché pour des idées.Le serveur de socket Unix C n'accepte pas les connexions
int main(){
int sock_fd;
int conn_fd;
struct sockaddr_in serv_addr;
struct sockaddr_in cli_addr;
socklen_t* serlen;
socklen_t* clilen;
clilen = malloc(sizeof(socklen_t));
serlen = malloc(sizeof(socklen_t));
*serlen = sizeof(serv_addr);
*clilen = sizeof(cli_addr);
/*=============================Create Socket=============================*/
//Create Socket
sock_fd = socket(AF_INET, SOCK_STREAM, 0);
if(sock_fd<0){
fprintf(stderr,"error creating socket\n");
exit(1);}
//Initialize Server Address Struct
bzero((char *) &serv_addr, *serlen);
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = INADDR_ANY;
serv_addr.sin_port = 0;
/*=============================Bind Address==============================*/
//Bind socket to an address
if(bind(sock_fd,(struct sockaddr*)&serv_addr,*serlen)<0){
fprintf(stderr,"error binding\n");
exit(1);}
//Get socket data
if(getsockname(sock_fd,(struct sockaddr*)&serv_addr, serlen)<0){
fprintf(stderr,"error with socket name");
exit(1);}
/*=============================Server Started============================*/
//Listen for connections
listen(sock_fd,32);
//Print port
printf("%i", serv_addr.sin_port);
conn_fd = accept(sock_fd,(struct sockaddr*)&cli_addr,clilen);
/**Do something exciting with my new connection**/
}
Avez-vous vérifié iptables et SELinux? – anishsane
Vérifiez si votre pare-feu a bloqué ces ports. – askmish
vérifié et effacé. Ce sont les ports que le noyau a assignés automatiquement en demandant de lier le socket à '0' donc j'imaginais que c'était le cas, mais ça valait le coup de vérifier à nouveau – darkpbj