2010-12-06 28 views
1

Eh bien .. Je ne suis pas vraiment sûr de ce que cela signifie, mais mes systèmes court et court et court sans pleurer pour memeory insuffisante ...WSAGetLastError() retourne 122

Je suppose que cela a à voir avec l'erreur du système 122, parce qu'il n'y a pas 122 dans les codes d'erreur winsock (MSDN) ...

Quelqu'un at-il une idée? ...

Il a lieu sur un appel à getaddrinfo(NULL, /*PortNumber*/, &hints, &pFinal)

EDIT bien. .. heres plus de code (l'avoir pas commentée, du sens Indifférent Fume, aussi)

  addrinfo hints, *pFinal = nullptr; 
      memset(&hints, 0, sizeof(hints)); 
      hints.ai_flags = AI_PASSIVE; 
      hints.ai_socktype = SOCK_STREAM; 
      hints.ai_family = AF_INET; 

      if(getaddrinfo(NULL, g_ACCEPTOR_PORT_NUMBER, &hints, &pFinal)) 
       return ERROR_BIND_SOCKET; 

Le problème réside dans mon g_ACCEPTOR_PORT_NUMBER, qui est une classe contenant

operator const char*() 
    { 
     std::stringstream ss; 
     ss << m_nPortNumber; 
     return ss.str().c_str(); 
    } 

dois-je changer la conversion opérateur? ... Je préfère utiliser ce "STRINGINT" donc je n'ai pas besoin d'enregistrer le numéro de port comme chaîne et nombre ou le convertir explicitement ...

+1

Posté un meilleur code, avoir PortNumber commenté n'a aucun sens. –

Répondre

1

Le problème est votre implémentation de operator const char*(). Une fois cette fonction renvoyée, votre objet stringstream n'est plus valide car il ne fait plus partie de la portée.

2

Probablement un mauvais paramètre sur l'appel getaddrinfo. Pouvez-vous poster plus de code?

Tapez net helpmsg 122 à une invite de commande et vous obtenez:

La zone de données passée à un appel système est trop petit.

+0

a posté plus de code – Incubbus

+0

Avoir cet opérateur retourne un 'std :: string' donc les données ne sortent pas de la portée quand' ss.str() 'est détruit –

+0

le problème est, que getaddrinfo prend un const char * et non un str ... j'essaie de ne pas utiliser c_str() ... mais je suppose que je dois ^^ ... – Incubbus

0

Plus que probablement, la taille de la variable pFinal est trop petite. Vous devrez poster plus de code pour obtenir une réponse plus complète.

+0

Si c'était le cas, alors les programmeurs de Microsoft avaient fait des choses incroyablement mauvaises ... Avez-vous même lu le code et mes commentaires ci-dessous l'EDIT? = – Incubbus