2010-01-04 9 views
1

Je développe un serveur de jeu dédié sur une machine linux, en C/C++ (mixte). Je l'extrait de code suivant:Odd socket() erreur - renvoie -1, mais errno = ERROR_SUCCESS

int sockfd=socket(AI_INET, SOCK_DGRAM, 0); 
if(sockfd==-1) 
{ 
    int err=errno; 
    fprintf(stderr,"%s",strerror(err)); 
    exit(1); 
} 

Mon problème ici, est que la prise est de retour -1 (ce qui implique un échec) et la chaîne d'erreur est en cours d'impression, mais il est « succès » (ERROR_SUCCESS).

Autres notes:

  • Je demande une prise sur un port> 1024 (hors contexte, mais pensé que je voudrais mentionner)
  • Je l'exécution de l'application en tant que super utilisateur
+0

Avez-vous couper/coller le code de votre application ou re type? Si c'est un re-type, je vérifierais que votre code a == (compare) dans le si et non un = (affectation). –

+0

C'est un '== 'bien ... – aviraldg

+0

Quelle est la valeur de errno? –

Répondre

11

Je me sens incroyablement stupide. En regardant attentivement sur mon code, sur mon ordinateur dev-montre:

if(sockfd==-1); 
... 
+5

vous n'êtes pas le premier à le faire, et vous ne serez pas le dernier :-) – moritz

+1

C'est exactement pourquoi ERROR_SUCCESS existe. :-) –

+0

aviraldg, vous pouvez accepter votre propre réponse afin que la question apparaisse comme résolue. –

1

Avez-vous plusieurs threads en cours d'exécution? Ils pourraient écraser la valeur errno.

Y a-t-il des lignes de code entre socket() et if() que vous avez omises? Un autre appel de fonction pourrait remplacer l'errno.

+2

'errno' est thread-local par C standard – qrdl

+1

Le standard C n'a pas de concept de threads. Bien que posix exige que ce soit thread local. – nos

Questions connexes