27#include <tqsocketnotifier.h> 
   30#include "tdesocketaddress.h" 
   32#include "tdesocketbase.h" 
   33#include "tdesocketdevice.h" 
   34#include "kstreamsocket.h" 
   35#include "kbufferedsocket.h" 
   36#include "kserversocket.h" 
   40class KNetwork::TDEServerSocketPrivate
 
   46  enum { None, LookupDone, Bound, Listening } state;
 
   50  bool bindWhenFound : 1, listenWhenBound : 1, useTDEBufferedSocket : 1;
 
   52  TDEServerSocketPrivate()
 
   53    : state(None), timeout(0), bindWhenFound(false), listenWhenBound(false),
 
   54      useTDEBufferedSocket(true)
 
   56    resolver.
setFlags(KResolver::Passive);
 
   57    resolver.
setFamily(KResolver::KnownFamily);
 
   62  : TQObject(parent, name), d(new TDEServerSocketPrivate)
 
   65           this, TQ_SLOT(lookupFinishedSlot()));
 
   69  : TQObject(parent, name), d(new TDEServerSocketPrivate)
 
   72           this, TQ_SLOT(lookupFinishedSlot()));
 
   73  d->resolver.setServiceName(service);
 
   77                 TQObject* parent, 
const char* name)
 
   78  : TQObject(parent, name), d(new TDEServerSocketPrivate)
 
   81           this, TQ_SLOT(lookupFinishedSlot()));
 
   93  TQMutexLocker locker(
mutex());
 
  107  return d->resolverResults;
 
  113    d->resolver.setFlags(d->resolver.flags() & ~KResolver::NoResolve);
 
  115    d->resolver.setFlags(d->resolver.flags() | KResolver::NoResolve);
 
  120  d->resolver.setFamily(families);
 
  125  d->resolver.setNodeName(TQString::null);
 
  126  d->resolver.setServiceName(service);
 
  127  d->resolverResults.empty();
 
  128  if (d->state <= TDEServerSocketPrivate::LookupDone)
 
  129    d->state = TDEServerSocketPrivate::None;
 
  134  d->resolver.setNodeName(node);
 
  135  d->resolver.setServiceName(service);
 
  136  d->resolverResults.empty();
 
  137  if (d->state <= TDEServerSocketPrivate::LookupDone)
 
  138    d->state = TDEServerSocketPrivate::None;
 
  149  if (d->resolver.isRunning() && !
blocking())
 
  152  if (d->state >= TDEServerSocketPrivate::LookupDone)
 
  156  if (d->resolver.serviceName().isNull() &&
 
  157      !d->resolver.nodeName().isNull())
 
  158    d->resolver.setServiceName(TQString::fromLatin1(
""));
 
  166  if (d->resolver.status() <= 0)
 
  188      d->state = TDEServerSocketPrivate::Bound;
 
  210  if (d->state >= TDEServerSocketPrivate::Bound)
 
  213  if (d->state < TDEServerSocketPrivate::LookupDone)
 
  217      d->bindWhenFound = 
true;
 
  219      if (d->state >= TDEServerSocketPrivate::Bound)
 
  220        d->bindWhenFound = 
false;
 
  239  if (d->state == TDEServerSocketPrivate::Listening)
 
  242  d->backlog = backlog;
 
  244  if (d->state < TDEServerSocketPrivate::Bound)
 
  248      d->listenWhenBound = 
true;
 
  251      d->listenWhenBound = 
false;
 
  255      if (d->state < TDEServerSocketPrivate::Bound)
 
  260      d->listenWhenBound = 
false;
 
  263  if (d->state < TDEServerSocketPrivate::Listening)
 
  272  if (d->resolver.isRunning())
 
  273    d->resolver.cancel(
false);
 
  274  d->state = TDEServerSocketPrivate::None;
 
  280  d->useTDEBufferedSocket = enable;
 
  285  if (d->state < TDEServerSocketPrivate::Listening)
 
  322  if (d->useTDEBufferedSocket)
 
  331  streamsocket->
setState(KStreamSocket::Connected);
 
  332  streamsocket->setFlags(IO_Sequential | IO_Raw | IO_ReadWrite | IO_Open | IO_Async);
 
  347void TDEServerSocket::lookupFinishedSlot()
 
  349  if (d->resolver.isRunning() || d->state > TDEServerSocketPrivate::LookupDone)
 
  352  if (d->resolver.status() < 0)
 
  356      d->bindWhenFound = d->listenWhenBound = 
false;
 
  357      d->state = TDEServerSocketPrivate::None;
 
  362  d->resolverResults = d->resolver.results();
 
  363  d->state = TDEServerSocketPrivate::LookupDone;
 
  366  if (d->bindWhenFound)
 
  375bool TDEServerSocket::doBind()
 
  377  d->bindWhenFound = 
false;
 
  380  KResolverResults::ConstIterator it = d->resolverResults.begin();
 
  381  for ( ; it != d->resolverResults.end(); ++it)
 
  384    if (d->listenWhenBound)
 
  396bool TDEServerSocket::doListen()
 
  406  TQObject::connect(
socketDevice()->readNotifier(), TQ_SIGNAL(activated(
int)),
 
  408  d->state = TDEServerSocketPrivate::Listening;
 
  413#include "kserversocket.moc" 
Abstract class for active sockets.
 
void setState(SocketState state)
Sets the socket state to state.
 
Name and service resolution results.
 
Name and service resolution class.
 
void setFamily(int families)
Sets the allowed socket families.
 
int setFlags(int flags)
Sets the flags.
 
virtual void close()
Closes this socket.
 
virtual TDESocketAddress localAddress() const
Returns this socket's local address.
 
void readyAccept()
This signal is emitted whenever the socket is ready for accepting – i.e., there is at least one conne...
 
KResolver & resolver() const
Returns the internal KResolver object used for looking up the host name and service.
 
void bound(const KResolverEntry &local)
This signal is emitted when the socket successfully binds to an address.
 
void gotError(int code)
This signal is emitted when this object finds an error.
 
void closed()
This signal is emitted when the socket completes the closing/shut down process.
 
void setFamily(int families)
Sets the allowed families for the resolutions.
 
void setTimeout(int msecs)
Sets the timeout for accepting.
 
virtual bool setSocketOptions(int opts)
Sets the socket options.
 
void setResolutionEnabled(bool enable)
Enables or disables name resolution.
 
virtual KActiveSocketBase * accept()
Accepts one incoming connection and return the associated, open socket.
 
virtual TDESocketAddress externalAddress() const
Returns this socket's externally-visible address if know.
 
virtual bool listen(int backlog=5)
Puts this socket into listening mode.
 
void copyError()
Convenience function to set this object's error code to match that of the socket device.
 
~TDEServerSocket()
Destructor.
 
virtual bool lookup()
Starts the lookup for peer and local hostnames as well as their services.
 
TDEServerSocket(TQObject *parent=0L, const char *name=0L)
Default constructor.
 
void setAddress(const TQString &service)
Sets the address on which we will listen.
 
virtual bool bind()
Binds the socket to the addresses previously set with setAddress.
 
void hostFound()
This signal is emitted when the lookup is successfully completed.
 
void setAcceptBuffered(bool enable)
Toggles whether the accepted socket will be buffered or not.
 
const KResolverResults & resolverResults() const
Returns the internal list of resolved results for the binding address.
 
A generic socket address.
 
virtual void setSocketDevice(TDESocketDevice *device)
Sets the socket implementation to be used on this socket.
 
TQMutex * mutex() const
Returns the internal mutex for this class.
 
SocketError error() const
Retrieves the socket error code.
 
void setError(SocketError error)
Sets the socket's error code.
 
bool blocking() const
Retrieves this socket's blocking mode.
 
TDESocketDevice * socketDevice() const
Retrieves the socket implementation used on this socket.
 
virtual bool setSocketOptions(int opts)
Set the given socket options.
 
Low-level socket functionality.
 
virtual TDESocketAddress externalAddress() const
Returns this socket's externally visible local address.
 
virtual bool setSocketOptions(int opts)
This implementation sets the options on the socket.
 
virtual void close()
Closes the socket.
 
virtual TDESocketDevice * accept()
Accepts a new incoming connection.
 
virtual TDESocketAddress localAddress() const
Returns this socket's local address.
 
TDEServerSocket(unsigned short int _port, bool _bind=true)
Constructor.
 
A namespace to store all networking-related (socket) classes.