WvStreams
Public Member Functions | Static Public Member Functions | Public Attributes | Protected Member Functions | Protected Attributes | List of all members
WvTCPListener Class Referenceabstract

Class to easily create the Server side of a WvTCPConn. More...

#include <wvtcplistener.h>

Inheritance diagram for WvTCPListener:
Inheritance graph
[legend]

Public Member Functions

 WvTCPListener (const WvIPPortAddr &_listenport)
 Create a WvStream that listens on _listenport of the current machine This is how you set up a TCP Server. More...
 
virtual IWvStreamaccept ()
 return a new WvTCPConn socket corresponding to a newly-accepted connection. More...
 
virtual const WvIPPortAddrsrc () const
 src() is a bit of a misnomer, but it returns the listener port. More...
 
const char * wstype () const
 
virtual void addwrap (IWvListenerWrapper _wrapper)
 Add a wrapper function for this stream: something that accept() will call to possibly wrap the stream from accept() before returning it. More...
 
virtual IWvListenerCallback onaccept (IWvListenerCallback _cb)
 Set a user-defined function to be called when a new connection is available. More...
 
IWvStreamwrap (IWvStream *s)
 
void runonce (time_t msec_delay)
 
virtual void close ()
 
virtual bool isok () const
 By default, returns true if geterr() == 0. More...
 
virtual void callback ()
 
int getfd () const
 
virtual int getrfd () const
 
virtual int getwfd () const
 
virtual void pre_select (SelectInfo &si)
 
virtual bool post_select (SelectInfo &si)
 
virtual size_t read (void *buf, size_t count)
 
virtual size_t read (WvBuf &outbuf, size_t count)
 
virtual size_t write (const void *buf, size_t count)
 
virtual size_t write (WvBuf &inbuf, size_t count=INT_MAX)
 
virtual void noread ()
 Shuts down the reading side of the stream. More...
 
virtual void nowrite ()
 Shuts down the writing side of the stream. More...
 
virtual void maybe_autoclose ()
 Auto-close the stream if the time is right. More...
 
virtual bool isreadable ()
 Returns true if the stream is readable. More...
 
virtual bool iswritable ()
 Returns true if the stream is writable (without using the outbuf). More...
 
virtual bool flush (time_t msec_timeout)
 flush the output buffer, if we can do it without delaying more than msec_timeout milliseconds at a time. More...
 
virtual bool should_flush ()
 Returns true if we want to flush the output buffer right now. More...
 
virtual IWvStreamCallback setreadcallback (IWvStreamCallback _cb)
 Sets a callback to be invoked when the stream is readable. More...
 
virtual IWvStreamCallback setwritecallback (IWvStreamCallback _cb)
 Sets a callback to be invoked when the stream is writable. More...
 
virtual IWvStreamCallback setexceptcallback (IWvStreamCallback _cb)
 Sets a callback to be invoked when the stream is in exception state. More...
 
virtual IWvStreamCallback setclosecallback (IWvStreamCallback _cb)
 Sets a callback to be invoked on close(). More...
 
virtual const char * wsname () const
 
virtual void set_wsname (WvStringParm name)
 
void set_wsname (WVSTRING_FORMAT_DECL)
 
virtual WSID wsid () const
 
virtual void outbuf_limit (size_t size)
 set the maximum size of outbuf, beyond which a call to write() will return 0. More...
 
virtual WvString getattr (WvStringParm name) const
 
virtual int geterr () const
 If isok() is false, return the system error number corresponding to the error, -1 for a special error string (which you can obtain with errstr()) or 0 on end of file. More...
 
virtual WvString errstr () const
 
virtual void seterr (int _errnum)
 Set the errnum variable – we have an error. More...
 
void seterr (WvStringParm specialerr)
 
void seterr (WVSTRING_FORMAT_DECL)
 
void seterr (const WvErrorBase &err)
 
void seterr_both (int _errnum, WvStringParm specialerr)
 
void seterr_both (int _errnum, WVSTRING_FORMAT_DECL)
 
void noerr ()
 Reset our error state - there's no error condition anymore. More...
 
virtual unsigned int addRef ()=0
 Indicate you are using this object. More...
 
virtual unsigned int release ()=0
 Indicate that you are finished using this object. More...
 
virtual IObjectgetInterface (const UUID &)=0
 Returns the requested XPLC interface. More...
 
virtual IWeakRefgetWeakRef ()=0
 Return a weak reference to this object. More...
 

Static Public Member Functions

static IWvListenercreate (WvString moniker, IObject *obj=NULL)
 
static IWvStreamcreate (WvStringParm moniker, IObject *obj=NULL)
 
static WvString strerror (int errnum)
 A replacement for the operating system ::strerror() function that can map more kinds of error strings (especially in win32). More...
 

Public Attributes

IWvStreamcloned
 
IWvListenerCallback acceptor
 
IWvListenerWrapper wrapper
 

Protected Member Functions

void accept_callback (WvIStreamList *list, wv::function< void(IWvStream *)> cb, IWvStream *_connection)
 

Protected Attributes

WvIPPortAddr listenport
 
int errnum
 
WvString errstring
 

Detailed Description

Class to easily create the Server side of a WvTCPConn.

Definition at line 16 of file wvtcplistener.h.

Constructor & Destructor Documentation

◆ WvTCPListener()

WvTCPListener::WvTCPListener ( const WvIPPortAddr _listenport)

Create a WvStream that listens on _listenport of the current machine This is how you set up a TCP Server.

Definition at line 392 of file wvtcp.cc.

References WvFdStream::set_close_on_exec(), WvFdStream::set_nonblock(), and WvErrorBase::seterr().

◆ ~WvTCPListener()

WvTCPListener::~WvTCPListener ( )
virtual

Definition at line 426 of file wvtcp.cc.

Member Function Documentation

◆ accept()

IWvStream * WvTCPListener::accept ( )
virtual

return a new WvTCPConn socket corresponding to a newly-accepted connection.

If no connection is ready immediately, we may end up blocking, or we may return NULL. You should use select(read=true) to check for a waiting connection.

Implements IWvListener.

Definition at line 432 of file wvtcp.cc.

References accept(), WvListener::isok(), and WvErrorBase::seterr().

Referenced by accept().

◆ src()

const WvIPPortAddr * WvTCPListener::src ( ) const
virtual

src() is a bit of a misnomer, but it returns the listener port.

Reimplemented from WvListener.

Definition at line 462 of file wvtcp.cc.

◆ accept_callback()

void WvTCPListener::accept_callback ( WvIStreamList list,
wv::function< void(IWvStream *)>  cb,
IWvStream _connection 
)
protected

Definition at line 452 of file wvtcp.cc.

◆ wstype()

const char * WvTCPListener::wstype ( ) const
inlinevirtual

Reimplemented from WvListener.

Definition at line 45 of file wvtcplistener.h.

◆ addwrap()

void WvListener::addwrap ( IWvListenerWrapper  _wrapper)
virtualinherited

Add a wrapper function for this stream: something that accept() will call to possibly wrap the stream from accept() before returning it.

You can use this more than once; the wrappers will be called in order (so the "innermost" stream is the original, the first wrapper is next, and so on).

Implements IWvListener.

Definition at line 54 of file wvlistener.cc.

◆ onaccept()

IWvListenerCallback WvListener::onaccept ( IWvListenerCallback  _cb)
virtualinherited

Set a user-defined function to be called when a new connection is available.

The new connection IWvStream is given, and it's the callback's responsibility to make sure it gets freed properly.

Implements IWvListener.

Definition at line 87 of file wvlistener.cc.

◆ wrap()

IWvStream * WvListener::wrap ( IWvStream s)
inherited

Definition at line 78 of file wvlistener.cc.

◆ runonce()

void WvListener::runonce ( time_t  msec_delay)
inherited

Definition at line 95 of file wvlistener.cc.

◆ close()

virtual void WvListener::close ( )
inlinevirtualinherited

Implements IWvStream.

Definition at line 36 of file wvlistener.h.

◆ isok()

virtual bool WvListener::isok ( ) const
inlinevirtualinherited

By default, returns true if geterr() == 0.

Might be overridden so that isok() == false even though no error code has been specified.

Implements IWvStream.

Reimplemented in WvNullListener.

Definition at line 38 of file wvlistener.h.

References WvErrorBase::isok(), and IWvStream::isok().

Referenced by accept(), and WvUnixListener::accept().

◆ callback()

void WvListener::callback ( )
virtualinherited

Implements IWvStream.

Definition at line 68 of file wvlistener.cc.

◆ getfd()

int WvListener::getfd ( ) const
inlineinherited

Definition at line 43 of file wvlistener.h.

◆ getrfd()

virtual int WvListener::getrfd ( ) const
inlinevirtualinherited

Implements IWvStream.

Definition at line 45 of file wvlistener.h.

◆ getwfd()

virtual int WvListener::getwfd ( ) const
inlinevirtualinherited

Implements IWvStream.

Definition at line 47 of file wvlistener.h.

◆ pre_select()

virtual void WvListener::pre_select ( SelectInfo si)
inlinevirtualinherited

Implements IWvStream.

Definition at line 53 of file wvlistener.h.

◆ post_select()

virtual bool WvListener::post_select ( SelectInfo si)
inlinevirtualinherited

Implements IWvStream.

Definition at line 55 of file wvlistener.h.

◆ read() [1/2]

virtual size_t WvListener::read ( void *  buf,
size_t  count 
)
inlinevirtualinherited

Implements IWvStream.

Definition at line 58 of file wvlistener.h.

◆ read() [2/2]

virtual size_t WvListener::read ( WvBuf outbuf,
size_t  count 
)
inlinevirtualinherited

Implements IWvStream.

Definition at line 62 of file wvlistener.h.

◆ write() [1/2]

virtual size_t WvListener::write ( const void *  buf,
size_t  count 
)
inlinevirtualinherited

Implements IWvStream.

Definition at line 60 of file wvlistener.h.

◆ write() [2/2]

virtual size_t WvListener::write ( WvBuf inbuf,
size_t  count = INT_MAX 
)
inlinevirtualinherited

Implements IWvStream.

Definition at line 64 of file wvlistener.h.

◆ noread()

virtual void WvListener::noread ( )
inlinevirtualinherited

Shuts down the reading side of the stream.

This is the opposite of nowrite(), but the name is actually slightly misleading; subsequent calls to read() might not fail; rather, if the other end of the connection tries to write to us, they should fail.

After noread(), if the read buffer (if any) is empty once, we promise that it will never refill.

If you call both noread() and nowrite(), then the stream does close() automatically once all buffers are empty.

Implements IWvStream.

Definition at line 66 of file wvlistener.h.

◆ nowrite()

virtual void WvListener::nowrite ( )
inlinevirtualinherited

Shuts down the writing side of the stream.

Subsequent calls to write() will fail. But if there's data in the output buffer, it will still be flushed.

If you call both noread() and nowrite(), then the stream does close() automatically once all buffers are empty.

Implements IWvStream.

Definition at line 68 of file wvlistener.h.

◆ maybe_autoclose()

virtual void WvListener::maybe_autoclose ( )
inlinevirtualinherited

Auto-close the stream if the time is right.

If noread() and nowrite() and all buffers are empty, then we can probably close.

Implements IWvStream.

Definition at line 70 of file wvlistener.h.

◆ isreadable()

virtual bool WvListener::isreadable ( )
inlinevirtualinherited

Returns true if the stream is readable.

Implements IWvStream.

Definition at line 72 of file wvlistener.h.

◆ iswritable()

virtual bool WvListener::iswritable ( )
inlinevirtualinherited

Returns true if the stream is writable (without using the outbuf).

Implements IWvStream.

Definition at line 74 of file wvlistener.h.

◆ flush()

virtual bool WvListener::flush ( time_t  msec_timeout)
inlinevirtualinherited

flush the output buffer, if we can do it without delaying more than msec_timeout milliseconds at a time.

(-1 means wait forever)

Returns true if it finished flushing (ie. the outbuf is empty).

FIXME: Something like this probably belongs in IWvStream, but probably not exactly this.

Implements IWvStream.

Definition at line 76 of file wvlistener.h.

◆ should_flush()

virtual bool WvListener::should_flush ( )
inlinevirtualinherited

Returns true if we want to flush the output buffer right now.

This allows us to implement delayed_flush(), flush_then_close(), etc, but it's still super-ugly and probably needs to go away. (In fact, all our buffer flushing is super-ugly right now.)

Implements IWvStream.

Definition at line 78 of file wvlistener.h.

◆ setreadcallback()

virtual IWvStreamCallback WvListener::setreadcallback ( IWvStreamCallback  _callfunc)
inlinevirtualinherited

Sets a callback to be invoked when the stream is readable.

Implements IWvStream.

Definition at line 80 of file wvlistener.h.

◆ setwritecallback()

virtual IWvStreamCallback WvListener::setwritecallback ( IWvStreamCallback  _callfunc)
inlinevirtualinherited

Sets a callback to be invoked when the stream is writable.

Implements IWvStream.

Definition at line 82 of file wvlistener.h.

◆ setexceptcallback()

virtual IWvStreamCallback WvListener::setexceptcallback ( IWvStreamCallback  _callfunc)
inlinevirtualinherited

Sets a callback to be invoked when the stream is in exception state.

Implements IWvStream.

Definition at line 84 of file wvlistener.h.

◆ setclosecallback()

virtual IWvStreamCallback WvListener::setclosecallback ( IWvStreamCallback  _callfunc)
inlinevirtualinherited

Sets a callback to be invoked on close().


Implements IWvStream.

Definition at line 86 of file wvlistener.h.

◆ wsname()

virtual const char * WvListener::wsname ( ) const
inlinevirtualinherited

Implements IWvStream.

Definition at line 88 of file wvlistener.h.

◆ set_wsname() [1/2]

virtual void WvListener::set_wsname ( WvStringParm  name)
inlinevirtualinherited

Implements IWvStream.

Definition at line 90 of file wvlistener.h.

◆ set_wsname() [2/2]

void WvListener::set_wsname ( WVSTRING_FORMAT_DECL  )
inlineinherited

Definition at line 92 of file wvlistener.h.

◆ wsid()

virtual WSID WvListener::wsid ( ) const
inlinevirtualinherited

Implements IWvStream.

Definition at line 96 of file wvlistener.h.

◆ outbuf_limit()

virtual void WvListener::outbuf_limit ( size_t  size)
inlinevirtualinherited

set the maximum size of outbuf, beyond which a call to write() will return 0.


Implements IWvStream.

Definition at line 98 of file wvlistener.h.

◆ getattr()

WvString WvListener::getattr ( WvStringParm  name) const
virtualinherited

Implements IWvStream.

Definition at line 107 of file wvlistener.cc.

◆ create() [1/2]

UUID_MAP_END IWvListener * IWvListener::create ( WvString  moniker,
IObject obj = NULL 
)
staticinherited

Definition at line 20 of file wvlistener.cc.

◆ create() [2/2]

IWvStream * IWvStream::create ( WvStringParm  moniker,
IObject obj = NULL 
)
staticinherited

Definition at line 80 of file wvstream.cc.

◆ geterr()

virtual int WvErrorBase::geterr ( ) const
inlinevirtualinherited

If isok() is false, return the system error number corresponding to the error, -1 for a special error string (which you can obtain with errstr()) or 0 on end of file.

If isok() is true, returns an undefined number.

Reimplemented in WvDBusServer, and WvStreamClone.

Definition at line 48 of file wverror.h.

Referenced by UniIniGen::commit(), UniFileSystemGen::get(), WvDBusServer::geterr(), WvStreamClone::geterr(), WvEncoderStream::isok(), UniConfDaemon::listen(), WvStream::seterr(), and WvMagicCircle::WvMagicCircle().

◆ errstr()

WvString WvErrorBase::errstr ( ) const
virtualinherited

Definition at line 127 of file wverror.cc.

◆ strerror()

WvString WvErrorBase::strerror ( int  errnum)
staticinherited

A replacement for the operating system ::strerror() function that can map more kinds of error strings (especially in win32).

Definition at line 91 of file wverror.cc.

References WvErrorBase::strerror().

Referenced by WvLog::perror(), WvErrorBase::strerror(), WvSSLStream::uread(), and WvSSLStream::uwrite().

◆ seterr() [1/4]

void WvErrorBase::seterr ( int  _errnum)
virtualinherited

Set the errnum variable – we have an error.

If called more than once, seterr() doesn't change the error code away from the previous one. That way, we remember the original cause of our problems.

Subclasses may want to override seterr(int) to shut themselves down (eg. WvStream::close()) when an error condition is set.

Note that seterr(WvString) will call seterr(-1).

Reimplemented in WvStream.

Definition at line 144 of file wverror.cc.

Referenced by accept(), WvUnixListener::accept(), WvDSAKey::getpem(), WvGlob::set(), WvStream::seterr(), WvMagicCircle::WvMagicCircle(), WvPam::WvPam(), WvShmZone::WvShmZone(), and WvTCPListener().

◆ seterr() [2/4]

void WvErrorBase::seterr ( WvStringParm  specialerr)
inherited

Definition at line 159 of file wverror.cc.

◆ seterr() [3/4]

void WvErrorBase::seterr ( WVSTRING_FORMAT_DECL  )
inlineinherited

Definition at line 70 of file wverror.h.

◆ seterr() [4/4]

void WvErrorBase::seterr ( const WvErrorBase err)
inherited

Definition at line 170 of file wverror.cc.

◆ seterr_both() [1/2]

void WvErrorBase::seterr_both ( int  _errnum,
WvStringParm  specialerr 
)
inherited

Definition at line 179 of file wverror.cc.

◆ seterr_both() [2/2]

void WvErrorBase::seterr_both ( int  _errnum,
WVSTRING_FORMAT_DECL   
)
inlineinherited

Definition at line 73 of file wverror.h.

◆ noerr()

void WvErrorBase::noerr ( )
inlineinherited

Reset our error state - there's no error condition anymore.

Definition at line 78 of file wverror.h.

◆ addRef()

virtual unsigned int IObject::addRef ( )
pure virtualinherited

Indicate you are using this object.

This increases the reference count of the object by one. Usually, when the reference count reaches zero, the object is freed automatically.

This called a "strong reference", because they will prevent the object from being destroyed. They should thus be used carefully, as they control the lifetime of the object. For example, you do not need to call addRef() on object passed as parameters, unless you intend on keeping them.

addRef() is often called automatically for you in XPLC, but you'll have to call release() by hand sometimes unless you use xplc_ptr.

Referenced by WvIStreamList::execute(), IObjectImplInternal::getInterface(), WeakRef::getObject(), StaticServiceHandler::getObject(), WvIStreamList::post_select(), WvQtStreamClone::WvQtStreamClone(), and WvSSLStream::WvSSLStream().

◆ release()

virtual unsigned int IObject::release ( )
pure virtualinherited

Indicate that you are finished using this object.

This decreases the reference count of the object by one. Usually, when the reference count reaches zero, the object is freed automatically.

You will usually need to manually release() any object given to you by any other XPLC function, unless you give the object to someone else who will call release.

If you use xplc_ptr, it will do this for you.

Referenced by WvIStreamList::execute(), mutate(), MonikerService::resolve(), and NewMoniker::resolve().

◆ getInterface()

virtual IObject * IObject::getInterface ( const UUID )
pure virtualinherited

Returns the requested XPLC interface.

Will return NULL if the interface is not supported. The returned interface has been addRef()ed, so you will need to release() it when done. Note that the interface returned may be a pointer to the same object or a different one - that's none of your business. Asking for the IObject interface should always return the same pointer for a given logical object, so this can be used for comparison by identity.

You should probably use the convenient mutate() and get() functions instead of this, or use an xplc_ptr, which mutates the object for you.

Referenced by get(), and mutate().

◆ getWeakRef()

virtual IWeakRef * IObject::getWeakRef ( )
pure virtualinherited

Return a weak reference to this object.

A weak reference points at the object, but does not control the lifetime of the object. An object can thus still be deleted while someone holds a weak reference. You will still need to release() the weak reference when you are done with it.

See also
IWeakRef

Member Data Documentation

◆ listenport

WvIPPortAddr WvTCPListener::listenport
protected

Definition at line 39 of file wvtcplistener.h.

◆ cloned

IWvStream* WvListener::cloned
inherited

Definition at line 20 of file wvlistener.h.

◆ acceptor

IWvListenerCallback WvListener::acceptor
inherited

Definition at line 21 of file wvlistener.h.

◆ wrapper

IWvListenerWrapper WvListener::wrapper
inherited

Definition at line 22 of file wvlistener.h.

◆ errnum

int WvErrorBase::errnum
protectedinherited

Definition at line 26 of file wverror.h.

◆ errstring

WvString WvErrorBase::errstring
protectedinherited

Definition at line 27 of file wverror.h.


The documentation for this class was generated from the following files: