mirror of
https://github.com/Telecominfraproject/wlan-cloud-lib-poco.git
synced 2026-01-16 02:11:15 +00:00
Feature net udp (#2347)
* add PMTU discovery #2329 * add socket gather/scatter capabilities #2330 (win, udp) * enable WSAPoll * add FastMemoryPool * add receiveFrom() with native args * allow copying of StringTokenizer * add AtomicFlag and SpinlockMutex * update .gitignore * UDPServer and client #2343 (windows) * fix warnings * fix warnings * regenerate Net VS solutions * regenerate CppUnit projects/solutions * clang fixes * gcc fixes * try to fix travis * more travis fixes * more travis fixes * handle UDPClient exception * fix makefiles and init order warnings * add UNIX gather/scatter sendto/recvfrom implementations and tests * run travis tests as sudo * try to run tests as sudo, 2nd attempt * fix warning * use mutex in reactor * lock-order-inversion in SocketReactor #2346 * add PMTU discovery #2329 (linux) * ICMPSocket does not check reply address #1921 * remove some ignored tests * add PMTU discovery #2329 (reconcile logic with #1921) * fix native receiveFrome() * reinstate ignoring of proxy errors * add testMTU to ignore list * add include atomic * NTPClient not checking reply address #2348 * some ICMP/MTU fixes * UDPSocketReader cleanup * resolve some socket inheritance warnings * add NTP time sync to ignored tests * SocketNotifier not thread-safe #2345 * prevent x64 samples build attempt for win32 * build TestApp and Library * fix ICMP tests * regen VS projects * regen VS projects and add missing 2012 files * remove debug prints
This commit is contained in:
committed by
GitHub
parent
da15142f69
commit
c4e676d36d
@@ -389,4 +389,79 @@ int Socket::select(SocketList& readList, SocketList& writeList, SocketList& exce
|
||||
}
|
||||
|
||||
|
||||
SocketBufVec Socket::makeBufVec(std::size_t size, std::size_t bufLen)
|
||||
{
|
||||
SocketBufVec buf(size);
|
||||
SocketBufVec::iterator it = buf.begin();
|
||||
SocketBufVec::iterator end = buf.end();
|
||||
for (; it != end; ++it)
|
||||
{
|
||||
// TODO: use memory pool
|
||||
*it = makeBuffer(malloc(bufLen), bufLen);
|
||||
}
|
||||
return buf;
|
||||
}
|
||||
|
||||
|
||||
void Socket::destroyBufVec(SocketBufVec& buf)
|
||||
{
|
||||
SocketBufVec::iterator it = buf.begin();
|
||||
SocketBufVec::iterator end = buf.end();
|
||||
for (; it != end; ++it)
|
||||
{
|
||||
#if defined(POCO_OS_FAMILY_WINDOWS)
|
||||
free(it->buf);
|
||||
#elif defined(POCO_OS_FAMILY_UNIX)
|
||||
free(it->iov_base);
|
||||
#endif
|
||||
}
|
||||
SocketBufVec().swap(buf);
|
||||
}
|
||||
|
||||
|
||||
SocketBuf Socket::makeBuffer(void* buffer, std::size_t length)
|
||||
{
|
||||
SocketBuf ret;
|
||||
#if defined(POCO_OS_FAMILY_WINDOWS)
|
||||
ret.buf = reinterpret_cast<char*>(buffer);
|
||||
ret.len = static_cast<ULONG>(length);
|
||||
#elif defined(POCO_OS_FAMILY_UNIX)
|
||||
ret.iov_base = buffer;
|
||||
ret.iov_len = length;
|
||||
#else
|
||||
throw NotImplementedException("Socket::makeBuffer(void*, size_t)");
|
||||
#endif
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
SocketBufVec Socket::makeBufVec(const std::vector<char*>& vec)
|
||||
{
|
||||
SocketBufVec buf(vec.size());
|
||||
SocketBufVec::iterator it = buf.begin();
|
||||
SocketBufVec::iterator end = buf.end();
|
||||
std::vector<char*>::const_iterator vIt = vec.begin();
|
||||
for (; it != end; ++it, ++vIt)
|
||||
{
|
||||
*it = makeBuffer(*vIt, strlen(*vIt));
|
||||
}
|
||||
return buf;
|
||||
}
|
||||
|
||||
|
||||
SocketBufVec Socket::makeBufVec(const std::vector<std::string>& vec)
|
||||
{
|
||||
SocketBufVec buf(vec.size());
|
||||
SocketBufVec::iterator it = buf.begin();
|
||||
SocketBufVec::iterator end = buf.end();
|
||||
std::vector<std::string>::const_iterator vIt = vec.begin();
|
||||
for (; it != end; ++it, ++vIt)
|
||||
{
|
||||
char* c = const_cast<char*>(vIt->data());
|
||||
*it = makeBuffer(reinterpret_cast<void*>(c), vIt->size());
|
||||
}
|
||||
return buf;
|
||||
}
|
||||
|
||||
|
||||
} } // namespace Poco::Net
|
||||
|
||||
Reference in New Issue
Block a user