2010-12-15 3 views
0

В моем приложении C++ я использую системный вызов getpeername, и он возвращает 0.0.0.0 в var sa. нет никакой ошибки в егто, и код возврата равен 0.linux системный вызов getpeername C++

вот код:

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; 
    } 
} 

примечание: Я компиляции этого кода с GCC в затмении. любая помощь?

спасибо!

+0

Можете ли вы показать нам пример вашего кода? – birryree

+0

Вы пытались использовать getpeername()? – yasouser

+0

Похоже, что он используется в сокете, который не подключен или это серверный сокет. –

ответ

0

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

EDIT: Проверьте, что значение носка. getpeername только извлекает и сохраняет адрес одноранговой сети сокета, в этом случае носок и сохраняет его в sa. Если ваш сокет не создан или ваш сокет не привязан к именованному сокету, то что указывает на неуказанный, и это может быть ваш случай.

+0

нет ошибок. он просто возвращается в sa 0.0.0.0 – gln

+0

@gln - см. мое обновление – DumbCoder

+0

как я могу проверить его? – gln

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

ошибок нет. он просто возвращается в sa 0.0.0.0 – gln

Смежные вопросы