Просто скажите мне почему вот это работает:
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));
}
Похожие темы
- Форум Таймаут для connect() (2009)
- Форум accept() не прерывается сигналом (2010)
- Форум Помогите с std::function (2023)
- Форум C++, OpenSSL. Как соединиться с сервером через прокси? (2015)
- Форум SOCK_STREAM и особенности работы с ним (2014)
- Форум Сокеты в Си (продолжене) (2005)
- Форум В чем ошибка чтения? (2020)
- Форум Сканер портов (2000)
- Форум Сокеты передача сообщений между компьютерами. Помогите найти ошибку. (2012)
- Форум сваливается send (сокет) (2008)