IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

R�seau C Discussion :

ERREUR Bind() 10038


Sujet :

R�seau C

  1. #1
    Membre averti
    Homme Profil pro
    �tudiant
    Inscrit en
    Mars 2019
    Messages
    15
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : �tudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2019
    Messages : 15
    Par d�faut ERREUR Bind() 10038
    Bonjour a tous,

    J'ai beau v�rifier de fond en comble mais je ne trouve pas du tout ce qui provoque cette erreur de bind ....
    Pour le contexte, je dois faire un r�seau en multi thread en C++ sur Windows et la fonction si dessous me sert � cr�er une nouvelle socket d'�coute sur le r�seau local.
    J'utilise les lib <windows.h>, <thread>, <winsock2.h>, <ws2tcpip.h>, <fstream>, <string> , <vector>, <limits>, <iostream>, <stdlib.h>, <stdio.h> (je ne sais pas si c'est utile mais ne on sait jamais).

    Voici mon code :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    SOCKET Init_Serveur() {
    	SOCKET ListenSocket = INVALID_SOCKET;
    	int iResult;
    	struct addrinfo hints, *result = NULL;
     
    	ZeroMemory(&hints, sizeof(hints));
    	hints.ai_family = AF_INET;  // Address Format Internet
    	hints.ai_socktype = SOCK_STREAM;  //  Provides sequenced, reliable, two-way, connection-based byte streams
    	hints.ai_protocol = IPPROTO_TCP;  // Indicates that we will use TCP
    	hints.ai_flags = AI_PASSIVE;  // Indicates that the socket will be passive => suitable for bind()
    	if (iResult = getaddrinfo(NULL, DEFAULT_PORT, &hints, &result) != GOOD_EXEC) {
    		std::cout << "Getaddrinfo failed with error: " << iResult << std::endl;
    	}
    	else {
    		if (ListenSocket = socket(result->ai_family, result->ai_socktype,
    			result->ai_protocol) == INVALID_SOCKET) {
    			std::cout << "Socket failed with error: " << WSAGetLastError() << std::endl;
    			ListenSocket = INVALID_SOCKET;
    		}
    		else {
    			if (iResult = bind(ListenSocket, result->ai_addr,
    				(int)result->ai_addrlen) == SOCKET_ERROR) {
    				std::cout << "Bind failed with error: " << WSAGetLastError() << std::endl;
    				closesocket(ListenSocket);
    				ListenSocket = INVALID_SOCKET;
    			}
    			else {
    				if (listen(ListenSocket, SOMAXCONN) == SOCKET_ERROR) {
    					std::cout << "Listen failed with error: " << WSAGetLastError() << std::endl;
    					closesocket(ListenSocket);
    					ListenSocket = INVALID_SOCKET;
    				}
    			}
    		}
    	}		
    	freeaddrinfo(result);
     
    	return ListenSocket;
    }
    Merci d'avance de votre aide.

  2. #2
    R�dacteur/Mod�rateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 153
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 38
    Localisation : Canada

    Informations professionnelles :
    Activit� : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 153
    Billets dans le blog
    4
    Par d�faut
    10038 signifie que le param�tre n'est pas un socket valide.
    Le code est peu lisible. Toute la magouille avec getaddrinfo est superflue.
    Tes if sont �tranges, m�me si j'appr�cie cette syntaxe pour des pointeurs, faire une assignation puis un check de cette fa�on r�duit la lisibilit�, et avoir les if sur 1 ou 2 lignes n'aide pas.
    Tous ces if en cascades n'ont �galement pour seul r�sultat que de diminuer la lisibilit�.

    Ouvrir un socket serveur TCP se fait en quelques lignes tr�s simples
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    SOCKET server = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    	if (server == INVALID_SOCKET)
    	{
    		std::cout << "Erreur initialisation socket : " << WSAGetLastError();
    		return -2;
    	}
     
    	const unsigned short port = 9999;
    	sockaddr_in addr;
    	addr.sin_addr.s_addr = INADDR_ANY;
    	addr.sin_port = htons(port);
    	addr.sin_family = AF_INET;
     
    	int res = bind(server, (sockaddr*)&addr, sizeof(addr));
    	if (res != 0)
    	{
    		std::cout << "Erreur bind : " << WSAGetLastError();
    		return -3;
    	}
     
    	res = listen(server, SOMAXCONN);
    	if (res != 0)
    	{
    		std::cout << "Erreur listen : " << WSAGetLastError();
    		return -4;
    	}
    Sans oublier d'initialiser WinSock au pr�alable bien s�r.

    Pour le reste : https://bousk.developpez.com/cours/r...iers-pas/#LIII
    Pensez � consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation r�seau ?
    Aucune aide via MP ne sera dispens�e. Merci d'utiliser les forums pr�vus � cet effet.

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Erreur Bind: Address family not supported by protocol
    Par sambia39 dans le forum R�seau
    R�ponses: 4
    Dernier message: 30/06/2014, 22h50
  2. Erreur Binding Listbox.style
    Par mariox dans le forum C#
    R�ponses: 3
    Dernier message: 22/08/2012, 15h38
  3. []Erreur sur second emploi collection binding
    Par jacma dans le forum VB 6 et ant�rieur
    R�ponses: 2
    Dernier message: 08/03/2004, 18h02
  4. erreur 10038
    Par made_in_france dans le forum MFC
    R�ponses: 2
    Dernier message: 08/01/2004, 17h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo