GetPeerName返回异常IP和Port
先贴代码:
int32 GetPeerName(int sock, char* ip, int len, unsigned short &port){ int32 iRet = -1; char szLog[1024]; char szErrorBuf[128]; memset(ip, 0, sizeof(ip)); port = 0; if (sock <= 0 ) { REALTIME_LOG("%s:%s:%d, GetPeerName Error ! SockFd = %d", __FILE__,__func__,__LINE__,sock); return -1; } //1-获取到struct sockaddr; struct sockaddr peeraddr;#ifdef HPUX int nAddrLen = sizeof(peeraddr);#else socklen_t nAddrLen;#endif //getpeername返回0表示成功,其他失败 if ( ::getpeername(sock, &peeraddr, &nAddrLen) != 0 ) { int32 iErrNo = errno; strerror_r( iErrNo, szErrorBuf, sizeof(szErrorBuf) ); REALTIME_LOG("%s:%s:%d, getpeername Error ! errno=%d, errorcode=%s \n", __FILE__,__func__,__LINE__,iErrNo,szErrorBuf); return -1; } //2-获取ip if (NULL == ::inet_ntop(AF_INET, &( (struct sockaddr_in *)&peeraddr)->sin_addr, ip, len) ) { int32 iErrNo = errno; strerror_r( errno, szErrorBuf, sizeof(szErrorBuf) ); REALTIME_LOG("%s:%s:%d, inet_ntop Error ! errno=%d, errorcode=%s \n",__FILE__,__func__,__LINE__, iErrNo,szErrorBuf); return -1; } //3-获取port port = ntohs((*(struct sockaddr_in *)&peeraddr).sin_port); return 0;}