Domanda

Beh .. non sono davvero sicuro di cosa significhi, ma i miei sistemi funzionano, funzionano e funzionano senza piangere per una memica insufficiente ...

Immagino che abbia a che fare con l'errore di sistema 122, perché non c'è 122 nei codici di errore Winsock (MSDN) ...

Qualcuno ha un indizio? ...

Si verifica in una chiamata a getaddrinfo(NULL, /*PortNumber*/, &hints, &pFinal)

MODIFICARE Va bene ... ecco più codice (non averlo commentato, non ha anche senso)

            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;

Il problema risiede nel mio g_acceptor_port_number, che è una classe contenente

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

Devo cambiare l'operatore di conversione? ... Preferisco usare questo "StringInt", quindi non ho bisogno di salvare il numero di porta come stringa e numero o convertirlo esplicitamente ...

È stato utile?

Soluzione

Il problema è l'implementazione di operator const char*(). Una volta che quella funzione torna, il tuo stringstream L'oggetto non è più valido perché non è più in portata.

Altri suggerimenti

Probabilmente un cattivo parametro sul getaddrinfo chiamata. Puoi pubblicare più codice?

Digitare net helpmsg 122 in un prompt dei comandi e ottieni:

L'area dati passata a una chiamata di sistema è troppo piccola.

getaddrinfo restituisce effettivamente un codice di errore, che è necessario testare i valori specificati in Documentazione getAddRinfo

Molto probabilmente, la dimensione della variabile pfinale è troppo piccola. Dovrai pubblicare più codice per ottenere una risposta più approfondita.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top