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:
Aleksandar Fabijanic
2018-06-02 14:02:33 -05:00
committed by GitHub
parent da15142f69
commit c4e676d36d
127 changed files with 5540 additions and 1408 deletions

View File

@@ -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