From: Christian P. <cp...@us...> - 2005-02-10 19:14:00
|
Update of /cvsroot/pclasses/pclasses2/src/Net In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv2439/src/Net Modified Files: Socket.cpp Log Message: Renamed FdListenerThread -> FdListenerList. Waiting for signaled Fd's is now done by the EventQueue - not by a seperate Thread. Added Socket::setBlocking(bool). Index: Socket.cpp =================================================================== RCS file: /cvsroot/pclasses/pclasses2/src/Net/Socket.cpp,v retrieving revision 1.8 retrieving revision 1.9 diff -u -d -r1.8 -r1.9 --- Socket.cpp 7 Feb 2005 18:47:13 -0000 1.8 +++ Socket.cpp 10 Feb 2005 19:13:45 -0000 1.9 @@ -27,6 +27,7 @@ #include <sys/types.h> #include <sys/socket.h> #include <unistd.h> +#include <fcntl.h> #include <errno.h> #include <netinet/in.h> @@ -462,6 +463,25 @@ opt.set(enable ? 1 : 0); } +void Socket::setBlocking(bool enable) throw(IO::IOError) +{ + int ret; + ret = ::fcntl(handle(), F_GETFL); + if(ret == -1) + throw IO::IOError(errno, "Could not get file-descriptor flags", + P_SOURCEINFO); + + long flags = ret; + if(enable) + ret |= O_NONBLOCK; + else + ret &= ~O_NONBLOCK; + + ret = ::fcntl(handle(), F_SETFL, flags); + throw IO::IOError(errno, "Could not get file-descriptor flags", + P_SOURCEINFO); +} + int Socket::handle() const throw() { return _handle; @@ -600,31 +620,34 @@ SocketFdListener(SocketListener* listener, int fd, int flags) : System::FdListener(fd, flags), _listener(listener) { - System::FdListenerThread& thr = System::FdListenerThread::instance(); - thr.addListener(this); + System::FdListenerList& lst = + System::FdListenerList::instance(_listener->eventQueue()); + + lst.addListener(this); } ~SocketFdListener() { - System::FdListenerThread& thr = System::FdListenerThread::instance(); - thr.removeListener(this); + System::FdListenerList& lst = + System::FdListenerList::instance(_listener->eventQueue()); + lst.removeListener(this); } void onRead() { - _listener->eventQueue().post( + _listener->eventQueue().send( System::Event(_listener->sender(), SocketEventRead)); } void onWrite() { - _listener->eventQueue().post( + _listener->eventQueue().send( System::Event(_listener->sender(), SocketEventWrite)); } void onError() { - _listener->eventQueue().post( + _listener->eventQueue().send( System::Event(_listener->sender(), SocketEventError)); } @@ -667,8 +690,8 @@ ((SocketFdListener*)_handle)->setFlags(mask); // Wakeup the thread so it can get the new event flags ... - System::FdListenerThread& thr = System::FdListenerThread::instance(); - thr.wakeup(); + System::FdListenerList& lst = System::FdListenerList::instance(eventQueue()); + lst.wakeup(); } int SocketListener::eventMask() const throw() |