FD_ZERO(&writefds);
FD_ZERO(&exceptfds);
- for (Socket::CollectionType::iterator i = Socket::Sockets.begin(); i != Socket::Sockets.end(); i++) {
+ Socket::CollectionType::iterator prev, i;
+ for (i = Socket::Sockets.begin(); i != Socket::Sockets.end(); ) {
Socket::Ptr socket = i->lock();
- if (socket == NULL)
+ prev = i;
+ i++;
+
+ if (!socket) {
+ Socket::Sockets.erase(prev);
continue;
+ }
int fd = socket->GetFD();
EventArgs ea;
ea.Source = shared_from_this();
- Socket::CollectionType::iterator prev, i;
for (i = Socket::Sockets.begin(); i != Socket::Sockets.end(); ) {
+ Socket::Ptr socket = i->lock();
+
prev = i;
i++;
- Socket::Ptr socket = prev->lock();
-
- if (socket == NULL)
+ if (!socket) {
+ Socket::Sockets.erase(prev);
continue;
+ }
int fd = socket->GetFD();
time(&now);
- for (Timer::CollectionType::iterator i = Timers.begin(); i != Timers.end(); ) {
- Timer::Ptr timer = Timer::Ptr(*i);
+ Timer::CollectionType::iterator prev, i;
+ for (i = Timers.begin(); i != Timers.end(); ) {
+ Timer::Ptr timer = i->lock();
+
+ prev = i;
i++;
- if (timer == NULL)
+ if (!timer) {
+ Timers.erase(prev);
continue;
+ }
if (timer->m_Next <= now) {
timer->Call();