通过socket得到自己的ip地址
现在正在编一个在一个多网卡(多个ip)的服务器上的server程序。我一开始用INADDR_ANY绑定在一个监听的socketA上,当收到客户端的connect时,我server这边用accept接收,我想知道的是,怎样从accept的信息以及socketA中知道这个信息是从那个网卡,那个ip进来的?
谢谢!
[解决办法]
getsockname() 可否?
[解决办法]
LST=accept(LSL,&saddr,PSOCKLEN_T&addrlen);
if (INVALID_SOCKET==LST) {
Log("%03d error on (accept) %d\n",cn,LastError());
break;//
}
addrlen=sizeof(sockaddr);
if (0!=(rc=getpeername(LST,&saddr,PSOCKLEN_T&addrlen))) {
Log("%03d 0!=%d=getpeername\n",cn,rc);
} else {
strcpy(RemoteIP,inet_ntoa(((sockaddr_in *)(&saddr))->sin_addr));
}
BOOL GetInfo(const sockaddr_in* ina,std::string& szName,std::string& szIP,u_short & nPort)
{
struct hostent *remoteHost;
if(ina->sin_addr.s_addr == INADDR_NONE)
return FALSE;
else
remoteHost = gethostbyaddr((const char*) &ina->sin_addr,sizeof(in_addr),AF_INET);
if (remoteHost == NULL)
return FALSE;
else
{
szName.assign(remoteHost->h_name);
szIP.assign(inet_ntoa(ina->sin_addr));
nPort = ntohs(ina->sin_port);
}
return TRUE;
}