3,881
社区成员
发帖
与我相关
我的任务
分享
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;
}