23 #include "udpsocketpool.h" 25 #include "refresher/hostport.h" 36 QSet<HostPort> addresses;
41 socket =
new QUdpSocket();
42 valid = socket->bind();
50 void addAddress(
const HostPort &hostPort)
52 addresses.insert(hostPort);
55 bool hasAddress(
const HostPort &hostPort)
const 57 return addresses.contains(hostPort);
62 return addresses.size();
73 d->sliceSize = qMax(1, sliceSize);
76 UdpSocketPool::~UdpSocketPool()
81 QUdpSocket *UdpSocketPool::acquire(
const QHostAddress &address, quint16 port)
87 if (asset->hasAddress(hostPort))
95 if (asset->size() < d->sliceSize)
97 asset->addAddress(hostPort);
105 this->connect(asset->socket, SIGNAL(readyRead()), SIGNAL(readyRead()));
106 asset->addAddress(hostPort);
108 return asset->socket;
117 QUdpSocket *UdpSocketPool::acquireMasterSocket()
119 return acquire(QHostAddress(
"0.0.0.0"), 0);
122 void UdpSocketPool::releaseAll()
128 bool UdpSocketPool::hasPendingDatagrams()
const 132 if (asset->socket->hasPendingDatagrams())
138 QByteArray UdpSocketPool::readNextDatagram(QHostAddress *address, quint16 *port)
142 QUdpSocket *socket = asset->socket;
143 if (socket->hasPendingDatagrams())
145 int size = socket->pendingDatagramSize();
146 char *buffer =
new char[size];
147 socket->readDatagram(buffer, size, address, port);
148 QByteArray data(buffer, size);