23 #include "udpsocketpool.h"
25 #include "refresher/hostport.h"
36 QSet<HostPort> addresses;
41 socket =
new QUdpSocket();
43 valid = socket->bind(QHostAddress(
"0.0.0.0"));
45 valid = socket->bind();
54 void addAddress(
const HostPort &hostPort)
56 addresses.insert(hostPort);
59 bool hasAddress(
const HostPort &hostPort)
const
61 return addresses.contains(hostPort);
66 return addresses.size();
77 d->sliceSize = qMax(1, sliceSize);
80 UdpSocketPool::~UdpSocketPool()
85 QUdpSocket *UdpSocketPool::acquire(
const QHostAddress &address, quint16 port)
91 if (asset->hasAddress(hostPort))
99 if (asset->size() < d->sliceSize)
101 asset->addAddress(hostPort);
102 return asset->socket;
109 this->connect(asset->socket, SIGNAL(readyRead()), SIGNAL(readyRead()));
110 asset->addAddress(hostPort);
112 return asset->socket;
121 QUdpSocket *UdpSocketPool::acquireMasterSocket()
123 return acquire(QHostAddress(
"0.0.0.0"), 0);
126 void UdpSocketPool::releaseAll()
132 bool UdpSocketPool::hasPendingDatagrams()
const
136 if (asset->socket->hasPendingDatagrams())
142 QByteArray UdpSocketPool::readNextDatagram(QHostAddress *address, quint16 *port)
146 QUdpSocket *socket = asset->socket;
147 if (socket->hasPendingDatagrams())
149 int size = socket->pendingDatagramSize();
150 char *buffer =
new char[size];
151 socket->readDatagram(buffer, size, address, port);
152 QByteArray data(buffer, size);