Domanda

In porting alcuni test di unità di lavoro da Linux a Windows sto correndo attraverso uno strano problema. Sembra che quando i miei test vanno a spegnere il socket server, shutdown () restituisce -1, ma WSAGetLastError () restituisce 0 (e getsockopt (con SO_ERROR) restituisce 0, e GetLastError () restituisce 0) ... Quindi, l'arresto ( ) mi dice che c'è un errore, ma tutte le chiamate normali per vedere cosa fosse questo problema stanno tornando "no problem!" ... qualcuno ha mai visto prima?

Il codice che richiama gli sguardi di arresto in questo modo:

int ret = ::shutdown( _sok, mode );
if( ret < 0 )
    X_THROW(( XSDK::ModuleId, XSDK::F_OS_ERROR, "Unable to shutdown socket."));

Quando prendo l'eccezione, che io chiamo tutte le funzioni di quelle GetLastError () ... fa lancio azzerare gli ultimi errori?

È stato utile?

Soluzione

La risposta ha finito per essere che quasi tutte le chiamate di sistema possono cancellare Win32 "UltimoErrore ()" errori ... Nel mio caso, un'eccezione significava la formattazione e la registrazione di un messaggio, che ha causato l'errore per essere chiari ... E anche se mi chiamavo WSAGetLastError () immediatamente nel mio catch (...) era già troppo tardi ...

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