2010-12-15 168 views
0

在我的C++應用程序中,我使用getpeername系統調用,它在var sa中返回0.0.0.0。 沒有錯誤的錯誤號,並返回代碼爲0linux系統調用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; 
    } 
} 

注:我編譯這個代碼在Eclipse中GCC。 有幫助嗎?

謝謝!

+0

你能告訴我們一個你的代碼的例子嗎? – birryree 2010-12-15 16:29:21

+0

你嘗試過使用getpeername()嗎? – yasouser 2010-12-15 16:35:15

+0

看起來它正在用於未連接的套接字或者是服務器套接字。 – 2010-12-15 16:45:07

回答

0

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

編輯:檢查什麼是襪子的價值。 getpeername只提取並存儲套接字的對等地址,在本例中爲sock,並將其存儲在sa中。如果你的套接字沒有被創建,或者你的套接字沒有被綁定到一個已命名的套接字,那麼沒有指定什麼,這可能是你的情況。

+0

沒有錯誤。它只是返回在0.0.0.0 – gln 2010-12-16 05:11:37

+0

@gln - 看我的更新 – DumbCoder 2010-12-16 12:02:00

+0

我該如何檢查它? – gln 2011-01-09 10:08:58

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

沒有錯誤。它只是在0.0.0.0中返回 – gln 2010-12-16 05:11:00