Доброго времени суток,
Есть такой код:
std::string TcpSocket::read() const {
std::string result;
const size_t bufSize = 200;
#if USE_HEAP
char *buffer = new char[bufSize];
#else
char buffer[200];
#endif
ssize_t size = recv(m_fd, &buffer, bufSize, 0);
if (size > 0) {
cerr << "## DEBUG: TcpSocket: read " << size << " bytes from "
<< "<" << host() << ":" << port() << ">" << endl;
result.assign(buffer, 0, size);
} else if (size == -1) {
if (errno != EAGAIN && errno != EWOULDBLOCK) {
addError(errno, "cannot read from TcpSocket");
}
}
#if USE_HEAP
delete [] buffer;
#endif
return result;
}
... и он (почти) прекрасно работает. Но как только
#define USE_HEAP 1
result.assign(buffer, 0, size);
Подскажите пожалуйста, что это может быть?
P.S. Попутно вопрос: надо ли в recv
передавать MSG_DONTWAIT
если сокет создавался O_NONBLOCK
?