Source Code (Use browser search to find items of interest.)
Class Index
ksirtet'SocketManager (./kdegames/ksirtet/lib/smanager.h:15)
class SocketManager
{
public:
SocketManager();
/** Be aware that unremoved sockets will be closed there. */
~SocketManager();
/** Remove all sockets and close them. */
void clean();
enum SocketProperty { ReadOnly, WriteOnly, ReadWrite };
/** @return the number of sockets. */
uint size() const { return sockets.size(); };
Socket *at(uint i);
Socket *operator [](uint i) { return at(i); }
/** @return the index of the socket (-1 if not present). */
int find(int fd);
/**
* Append a socket at the end of the array of sockets.
* @param sp determines if the socket will be used for ReadWrite,
* ReadOnly or WriteOnly operations.
* @return the index of the socket.
*/
uint append(int fd, SocketProperty sp = ReadWrite, bool createNotifier = FALSE,
QObject *parent = 0, const char *name = 0);
/**
* Remove the socket indexed <I>i</I>. Note that the following sockets in
* the array will have their index decremented by one.
* @param close determines if the removed socket should be closed.
* @return the value of the removed socket.
*/
int remove(uint i, bool close = TRUE);
/** @return TRUE if it is possible to write to all the writeable sockets. */
bool canWriteAll(uint sec = 0, uint usec = 0);
/** @return TRUE if it is possible to write to the specified socket. */
bool canWrite(uint i, uint sec = 0, uint usec = 0);
Stream &commonWritingStream() { return writing; }
bool writeCommon(uint i); // do not clear stream
/**
* Check if there are pending data on at least one of the readeable
* socket.
*/
bool checkPendingData(uint sec = 0, uint usec = 0);
bool dataPending(uint i);
private:
QArray<Socket *> sockets;
fd_set read_set, write_set, read_tmp, write_tmp;
struct timeval tv;
int max_fd;
uint nbWriteable;
WritingStream writing;
};
ksirtet'SocketManager::SocketManager() (./kdegames/ksirtet/lib/smanager.cpp:23)
SocketManager::SocketManager()
{
max_fd = 0;
FD_ZERO(&read_set);
FD_ZERO(&write_set);
nbWriteable = 0;
}
ksirtet'SocketManager::~SocketManager() (./kdegames/ksirtet/lib/smanager.cpp:31)
SocketManager::~SocketManager()
{
clean();
}
ksirtet'SocketManager::clean() (./kdegames/ksirtet/lib/smanager.cpp:36)
void SocketManager::clean()
{
for(uint i=0; i<sockets.size(); i++) delete sockets[i];
sockets.resize(0);
}
ksirtet'SocketManager::at() (./kdegames/ksirtet/lib/smanager.cpp:42)
Socket *SocketManager::at(uint i)
{
ASSERT( i<sockets.size() );
return sockets[i];
}
ksirtet'SocketManager::find() (./kdegames/ksirtet/lib/smanager.cpp:48)
int SocketManager::find(int fd)
{
for(uint i=0; i<sockets.size(); i++)
if ( sockets[i]->fd()==fd ) return i;
return -1;
}
ksirtet'SocketManager::append() (./kdegames/ksirtet/lib/smanager.cpp:55)
uint SocketManager::append(int fd, SocketProperty sp, bool createNotifier,
QObject *parent, const char *name)
{
ASSERT( fd!=-1 );
uint s = sockets.size();
sockets.resize(s+1);
sockets[s] = new Socket(fd, createNotifier, parent, name);
max_fd = QMAX(max_fd, fd);
if ( sp==ReadWrite || sp==ReadOnly ) FD_SET(fd, &read_set);
if ( sp==ReadWrite || sp==WriteOnly ) {
nbWriteable++;
FD_SET(fd, &write_set);
}
return s;
}
ksirtet'SocketManager::remove() (./kdegames/ksirtet/lib/smanager.cpp:75)
int SocketManager::remove(uint i, bool Close)
{
Socket *so = at(i);
uint s = sockets.size()-1;
for(uint j=i; j<s; j++) sockets[j] = sockets[j+1];
sockets.resize(s);
max_fd = 0;
for(uint j=0; j<s; j++)
max_fd = QMAX(max_fd, sockets[j]->fd());
int fd = so->fd();
if ( FD_ISSET(fd, &read_set) ) FD_CLR(fd, &read_set);
if ( FD_ISSET(fd, &write_set) ) {
nbWriteable--;
FD_CLR(fd, &write_set);
}
if (!Close) so->remove();
delete so;
return fd;
}
ksirtet'SocketManager::canWriteAll() (./kdegames/ksirtet/lib/smanager.cpp:99)
bool SocketManager::canWriteAll(uint sec, uint usec)
{
write_tmp = write_set;
tv.tv_sec = sec;
tv.tv_usec = usec;
return ( select(max_fd+1, 0, &write_tmp, 0, &tv)==(int)nbWriteable );
}
ksirtet'SocketManager::canWrite() (./kdegames/ksirtet/lib/smanager.cpp:107)
bool SocketManager::canWrite(uint i, uint sec, uint usec)
{
int fd = at(i)->fd();
FD_ZERO(&write_tmp);
FD_SET(fd, &write_tmp);
tv.tv_sec = sec;
tv.tv_usec = usec;
return ( select(fd+1, 0, &write_tmp, 0, &tv)==1 );
}
ksirtet'SocketManager::checkPendingData() (./kdegames/ksirtet/lib/smanager.cpp:117)
bool SocketManager::checkPendingData(uint sec, uint usec)
{
read_tmp = read_set;
tv.tv_sec = sec;
tv.tv_usec = usec;
return ( select(max_fd+1, &read_tmp, 0, 0, &tv)!=-1 );
}
ksirtet'SocketManager::dataPending() (./kdegames/ksirtet/lib/smanager.cpp:125)
bool SocketManager::dataPending(uint i)
{
int fd = at(i)->fd();
return FD_ISSET(fd, &read_tmp);
}
ksirtet'SocketManager::writeCommon() (./kdegames/ksirtet/lib/smanager.cpp:131)
bool SocketManager::writeCommon(uint i)
{
return at(i)->write(writing.buffer());
}