2010-12-15 8 views
0

Dans mon application C++ j'utilise getpeername system call et il renvoie 0.0.0.0 dans la var sa. il n'y a pas d'erreur dans errno, et le code de retour est 0.linux appel système getpeername C++

est ici le code:

int GetSock(int sock) 
{ 
    struct sockaddr_storage ss; 
    socklen_t salen = sizeof(ss); 
    struct sockaddr *sa; 
    struct addrinfo hints, *paddr, *paddrp; 

    sa = (struct sockaddr *)&ss; 

    if (getpeername(sock, sa, &salen) != 0) { 
     error = errno; 
     return -1; 
    } 
} 

Note: Je compile ce code avec GCC dans Eclipse. toute aide?

merci!

+0

Pouvez-vous nous montrer un exemple de votre code? – birryree

+0

Avez-vous essayé d'utiliser getpeername()? – yasouser

+0

On dirait qu'il est utilisé sur une socket qui n'est pas connectée ou qui est une socket serveur. –

Répondre

0

Upon successful completion, 0 shall be returned. Otherwise, -1 shall be returned and errno set to indicate the error.

EDIT: Vérifiez quelle est la valeur de la chaussette est. getpeername extrait et stocke uniquement l'adresse de l'homologue du socket, dans ce cas sock, et le stocke dans sa. Si votre socket n'est pas créé ou si votre socket n'est pas liée à un socket nommé, ce qui pointe vers n'est pas spécifié et cela peut être votre cas.

+0

il n'y a pas d'erreur. il suffit de retourner dans sa 0.0.0.0 – gln

+0

@gln - Voir ma mise à jour – DumbCoder

+0

comment puis-je le vérifier? – gln

1
 error = errno; 
     return -1; 
    } 
    /* Did you mean to return something right here? */ 
} 
+0

il n'y a pas d'erreur. il revient juste dans sa 0.0.0.0 – gln

Questions connexes