diff options
Diffstat (limited to 'src/server.cpp')
-rw-r--r-- | src/server.cpp | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/src/server.cpp b/src/server.cpp index 53b4301..29d4822 100644 --- a/src/server.cpp +++ b/src/server.cpp | |||
@@ -74,12 +74,26 @@ void Bu::Server::scan() | |||
74 | } | 74 | } |
75 | } | 75 | } |
76 | 76 | ||
77 | Bu::List<int> lDelete; | ||
77 | // Now we just try to write all the pending data on all the sockets. | 78 | // Now we just try to write all the pending data on all the sockets. |
78 | // this could be done better eventually, if we care about the socket | 79 | // this could be done better eventually, if we care about the socket |
79 | // wanting to accept writes (using a select). | 80 | // wanting to accept writes (using a select). |
80 | for( ClientHash::iterator i = hClients.begin(); i != hClients.end(); i++ ) | 81 | for( ClientHash::iterator i = hClients.begin(); i != hClients.end(); i++ ) |
81 | { | 82 | { |
82 | (*i)->processOutput(); | 83 | (*i)->processOutput(); |
84 | if( (*i)->wantsDisconnect() ) | ||
85 | { | ||
86 | lDelete.append( i.getKey() ); | ||
87 | } | ||
88 | } | ||
89 | |||
90 | for( Bu::List<int>::iterator i = lDelete.begin(); i != lDelete.end(); i++ ) | ||
91 | { | ||
92 | Client *pClient = hClients.get( *i ); | ||
93 | onClosedConnection( pClient ); | ||
94 | pClient->close(); | ||
95 | hClients.erase( *i ); | ||
96 | FD_CLR( *i, &fdActive ); | ||
83 | } | 97 | } |
84 | } | 98 | } |
85 | 99 | ||