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()
|