aboutsummaryrefslogtreecommitdiffstats
path: root/lib/ppsocket.cc
diff options
context:
space:
mode:
authorFritz Elfert <felfert@to.com>2002-03-05 17:58:11 +0000
committerFritz Elfert <felfert@to.com>2002-03-05 17:58:11 +0000
commitcb2577b29fe7b93e9b168ded7f35da748fdeaf1d (patch)
treed7cf962ead89069f885f8da7137feb94acb3dfec /lib/ppsocket.cc
parent8f9ae0a93ba3ea860a28933c2a411eae9365c859 (diff)
downloadplptools-cb2577b29fe7b93e9b168ded7f35da748fdeaf1d.tar.gz
plptools-cb2577b29fe7b93e9b168ded7f35da748fdeaf1d.tar.bz2
plptools-cb2577b29fe7b93e9b168ded7f35da748fdeaf1d.zip
- Re-Implemented lower levels of ncpd (packet and link).
ncpd is now multithreaded. Results in much better performance and less CPU usage.
Diffstat (limited to 'lib/ppsocket.cc')
-rw-r--r--lib/ppsocket.cc18
1 files changed, 10 insertions, 8 deletions
diff --git a/lib/ppsocket.cc b/lib/ppsocket.cc
index a5982b3..8f52988 100644
--- a/lib/ppsocket.cc
+++ b/lib/ppsocket.cc
@@ -83,8 +83,11 @@ ppsocket::~ppsocket()
void ppsocket::
setWatch(IOWatch *watch) {
- if (watch)
+ if (watch) {
+ if (myWatch && (m_Socket != INVALID_SOCKET))
+ myWatch->remIO(m_Socket);
myWatch = watch;
+ }
}
bool ppsocket::
@@ -192,14 +195,11 @@ listen(const char * const Host, int Port)
m_LastError = errno;
return (false);
}
- // Our accept member function relies on non-blocking accepts,
- // so set the flag here (rather than every time around the loop)
- fcntl(m_Socket, F_SETFL, O_NONBLOCK);
return (true);
}
ppsocket *ppsocket::
-accept(string *Peer)
+accept(string *Peer, IOWatch *iow)
{
#ifdef sun
int len;
@@ -214,6 +214,8 @@ accept(string *Peer)
//*****************************************************
accepted = new ppsocket;
+ if (!iow)
+ iow = myWatch;
if (!accepted) {
m_LastError = errno;
return NULL;
@@ -251,9 +253,9 @@ accept(string *Peer)
if (peer)
*Peer = peer;
}
- if (accepted && myWatch) {
- accepted->setWatch(myWatch);
- myWatch->addIO(accepted->m_Socket);
+ if (accepted && iow) {
+ accepted->setWatch(iow);
+ iow->addIO(accepted->m_Socket);
}
return accepted;
}