Просто скажите мне почему вот это работает:
std::auto_ptr<Socket> Socket::accept()
{
int socketId;
sockaddr_in addr;
socklen_t addrLen;
int portAddr;
char ipBuf[INET_ADDRSTRLEN];
socketId = ::accept(socketDesk, (sockaddr*)&addr, &addrLen);
const char *ipTemp = inet_ntop(AF_INET, &(addr.sin_addr), ipBuf, sizeof(ipBuf));
std::string *ipHell = new std::string(ipTemp);
std::string ip = *ipHell;
portAddr = addr.sin_port;
delete ipHell;
return std::auto_ptr<Socket>(new Socket(socketId, addr, addrLen, portAddr, ip));
}
- то есть если пробуем посмотреть ip, то там правильный адрес.
А если делаем следующим образом, то нет?
std::auto_ptr<Socket> Socket::accept()
{
int socketId;
sockaddr_in addr;
socklen_t addrLen;
int portAddr;
char ipBuf[INET_ADDRSTRLEN];
socketId = ::accept(socketDesk, (sockaddr*)&addr, &addrLen);
std::string ip(inet_ntop(AF_INET, &(addr.sin_addr), ipBuf, sizeof(ipBuf)));
portAddr = addr.sin_port;
return std::auto_ptr<Socket>(new Socket(socketId, addr, addrLen, portAddr, ip));
}
Здесть вместо ip адерса пишеться какая-то чушь?
А вообще все еще круче. Чушь лезет даже при таком раскладе:
std::auto_ptr<Socket> Socket::accept()
{
int socketId;
sockaddr_in addr;
socklen_t addrLen;
int portAddr;
char ipBuf[INET_ADDRSTRLEN];
socketId = ::accept(socketDesk, (sockaddr*)&addr, &addrLen);
const char *ipTemp = inet_ntop(AF_INET, &(addr.sin_addr), ipBuf, sizeof(ipBuf)));
std::string ip(ipTemp);
portAddr = addr.sin_port;
return std::auto_ptr<Socket>(new Socket(socketId, addr, addrLen, portAddr, ip));
}