summaryrefslogtreecommitdiff
path: root/src/socketengine.cpp
AgeCommit message (Collapse)Author
2009-09-26Clean up SocketEngine interface to allow edge-triggered I/O and sockets that ↵danieldg
do not force readability. git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@11760 e03df62e-2008-0410-955e-edbf42e46eb7
2009-09-21Create StreamSocket for IO hooking implementationdanieldg
Fixes the SSL SendQ bug Removes duplicate code between User and BufferedSocket Simplify SSL module API Simplify EventHandler API (Readable/Writeable moved to SE) Add hook for culled objects to invoke callbacks prior to destructor Replace SocketCull with GlobalCull now that sockets can close themselves Shorten common case of user read/parse/write path: User::Write is now zero-copy up to syscall/SSL invocation User::Read has only two copy/scan passes from read() to ProcessCommand git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@11752 e03df62e-2008-0410-955e-edbf42e46eb7
2009-09-02ThreadWindows: Remove ThreadSignalListener and connect the socket right awaydanieldg
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@11617 e03df62e-2008-0410-955e-edbf42e46eb7
2009-09-02Cast rework: use C++ style static_cast<> instead of C-style castsdanieldg
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@11595 e03df62e-2008-0410-955e-edbf42e46eb7
2009-03-15Update all wiki links to point to the new wiki. This was done automatically ↵psychon
with the following command, only .Makefile.inc got some indent fixups by hand. for file in $(find -type f -and -not -path '*/.svn/*' -and -not -name '*.so') ; do sed -e 's#http://www.inspircd.org/wiki#http://wiki.inspircd.org#' -e 's#http://wiki.inspircd.org/index.php/#http://wiki.inspircd.org/#' -i $file ; done git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@11223 e03df62e-2008-0410-955e-edbf42e46eb7
2009-02-14Nuke trailing spacespeavey
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@11105 e03df62e-2008-0410-955e-edbf42e46eb7
2009-01-02Update copyrights for 2009.w00t
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@10932 e03df62e-2008-0410-955e-edbf42e46eb7
2008-11-01Second attempt at time() -> SI->Time(), now problems with the original were ↵w00t
fixed. (SI::TIME was not initialised). Thanks Namegduf! (Please test, all, valdebug etc, report odd behaviour/warnings!) git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@10783 e03df62e-2008-0410-955e-edbf42e46eb7
2008-10-23Revert earlier time() -> SI->Time() diff for now, this causes problems with ↵w00t
dns.cpp in mysterious ways.. seemingly a bad pointer there somehow..? git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@10695 e03df62e-2008-0410-955e-edbf42e46eb7
2008-10-23Patch from Namegduf converting all instances (where possible) of time() -> ↵w00t
ServerInstance->Time(). Thanks! git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@10691 e03df62e-2008-0410-955e-edbf42e46eb7
2008-09-07Initialising the member we added might be an idea.w00t
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@10456 e03df62e-2008-0410-955e-edbf42e46eb7
2008-09-07Fix a stupid error, and two warnings.w00t
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@10450 e03df62e-2008-0410-955e-edbf42e46eb7
2008-09-07Start moving IO hooking from being bufferedsocket based to residing in ↵w00t
EventHandler, this will pave the way for a generic listener type, and also simplifies a lot of code. git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@10447 e03df62e-2008-0410-955e-edbf42e46eb7
2008-08-25Add poll to build system if kqueue/epoll/ports are not used, above select.w00t
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@10267 e03df62e-2008-0410-955e-edbf42e46eb7
2008-07-29Remove last vestige of libircdfoo, by changing tag into a single ↵w00t
identifier marking object as requiring compilation into a .o (minor commit) git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@10076 e03df62e-2008-0410-955e-edbf42e46eb7
2008-06-18Properly clear the bandwidth measurementsbrain
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@9923 e03df62e-2008-0410-955e-edbf42e46eb7
2008-06-18another fix just to piss off people who are trying to build every svn revisionbrain
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@9920 e03df62e-2008-0410-955e-edbf42e46eb7
2008-06-18Fix typobrain
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@9919 e03df62e-2008-0410-955e-edbf42e46eb7
2008-06-18Measure bandwidth statistics from the socket engine (kiloBITS per second in, ↵brain
out, total) and display them in /stats z plus send them via the named pipe to the windows gui git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@9918 e03df62e-2008-0410-955e-edbf42e46eb7
2008-04-15Fix the problems GreenReaper found with the windows select engine, this has ↵brain
never worked properly in trunk! -- This needs tidying up, its on my todo either tonight if im awake enough, or tomorrow evening git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@9514 e03df62e-2008-0410-955e-edbf42e46eb7
2008-04-02Automatic detection and allocation of max fds. No longer needs recompile to ↵brain
change, just adjust it in your kernel or whatever and restart insp. Please note that select and iocp socket engines do not support detection and are always set to FD_SETSIZE and 10240 descriptors respectively. git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@9263 e03df62e-2008-0410-955e-edbf42e46eb7
2008-02-14Keep count of the number of events in total, and seperate read, write and ↵brain
error event counters. We can use this for monitoring of heavy socket engine activity, e.g. a 'stuck' eventhandler git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@8933 e03df62e-2008-0410-955e-edbf42e46eb7
2008-01-10Header update: 2007 -> 2008w00t
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@8694 e03df62e-2008-0410-955e-edbf42e46eb7
2007-10-23Move socketengines into their own dir. This was all w00t's idea, but i told ↵brain
him no because i didnt think it would work. Now ive done it myself :P ner ner ne ner ner :) git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@8332 e03df62e-2008-0410-955e-edbf42e46eb7
2007-10-22Conditionals in the buildsystem language allowing for checking of configure ↵brain
flags: /* $If: USE_KQUEUE */ /* $ExtraSources: socketengine_kqueue.cpp */ /* $ExtraObjects: socketengine_kqueue.o */ /* $EndIf */ This is used exactly where the example dictates: to pick a socket engine from the socketengine.cpp. git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@8308 e03df62e-2008-0410-955e-edbf42e46eb7
2007-10-22Remove the need for a bunch of the hard coded arrays/hashes by scanning the ↵brain
src/ dir for tag comments, like in modules git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@8307 e03df62e-2008-0410-955e-edbf42e46eb7
2007-09-04* Fixed some incorrect declarations in IOCPEngineburlex
* Fixed the virtual socket wrapper functions in IOCPEngine {these should really be inlined on unix} * Fixed several compilation issues under Win32 * Fixed calls to close() which should've been changed to SE->Close() + Added a crashdump saving system to Win32 builds. Dumps are saved in the format of dump-<exename>-<year>-<month>-<day>-<hour>-<minute>-<second>.dmp in the working directory. Enabled by default, undefine ENABLE_CRASHDUMPS to disable. + Added m_operflood, this is a module I've had lying around for some time but some users may like it as it allows unreal-like behaviour without increasing flood limits for non-opers. git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@8015 e03df62e-2008-0410-955e-edbf42e46eb7
2007-08-23Craquity craq De-craq!brain
This is probably broken on windows, do not attempt to use there yet unless you like broken stuff. Cant say for sure as i havent even tried to build yet and most likely wont tonight. --- Abstract most of the berkely socket API out into SocketEngine derived classes. SocketEngine base class implements standard berkely sockets that 'real mens systems' like linux and freebsd have. For socketengine_iocp we implement the windows specific nonesense like the special things needed for udp and accept (ick). All this to eliminate a bunch of ifdefs. git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@7810 e03df62e-2008-0410-955e-edbf42e46eb7
2007-08-15This is now correct.brain
No win32 #ifdefs in the base class, being as IOCPEngine is only built on windows we can put the code here without the need for ifdef. The original check in socketengine_iocp was broken, copied burlex's fixed version into the child class git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@7724 e03df62e-2008-0410-955e-edbf42e46eb7
2007-08-15* include/caller.h will now compile correctly on Windows platforms.burlex
+ Implemented gettimeofday in win32 wrapper, link rtt's will now display in milliseconds. * SocketEngine::BoundsCheckFd will now handle Windows event handler cases correctly. (fixing writing to sockets not working) * Fixed VC71 project. git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@7723 e03df62e-2008-0410-955e-edbf42e46eb7
2007-07-27Some smart tricks to eliminate win32 ifdefs that are creeping into portable ↵brain
files git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@7589 e03df62e-2008-0410-955e-edbf42e46eb7
2007-07-16OOPS! We try again, since I'm smoking craq. LF is 0x0a NOT CR.peavey
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@7456 e03df62e-2008-0410-955e-edbf42e46eb7
2007-07-16'svn propset -R svn:eol-style CR *' Set to UNIX-style always. Binaries are ↵peavey
auto skipped by svn. git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@7454 e03df62e-2008-0410-955e-edbf42e46eb7
2007-05-19Windows support. Tested and working to compile on freebsd and linux. Next ↵w00t
step is to make sure it actually works in windows too. ;p. Add Burlex to contributors. git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@7043 e03df62e-2008-0410-955e-edbf42e46eb7
2007-01-11pgsql should now work thx to added posibility to force a fd out of the ↵peavey
socketengine. This should only be used as a *last resort* when dealing with 3rd party libs that invalidates a file descriptor beyond your control. git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@6295 e03df62e-2008-0410-955e-edbf42e46eb7
2006-12-15Jesus, look who's the commit whore today. More header updates, and removal ↵w00t
of namespacing. git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@5996 e03df62e-2008-0410-955e-edbf42e46eb7
2006-10-30WARNING: This commit breaks kqueue and select -- work in progress!brain
epoll now allows both a write and a read event on a socket at the same time. git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@5580 e03df62e-2008-0410-955e-edbf42e46eb7
2006-08-30Wahhhhhhhhhhhh bwahahaha. Mass commit to tidy up tons of messy include listsbrain
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@5080 e03df62e-2008-0410-955e-edbf42e46eb7
2006-08-18Get rid of SocketEngine::Wait and array-copy, change to ↵brain
SocketEngine::DispatchEvents git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@4944 e03df62e-2008-0410-955e-edbf42e46eb7
2006-08-18EventHandler class, an abstraction for raw i/obrain
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@4941 e03df62e-2008-0410-955e-edbf42e46eb7
2006-08-12So i wonder why we've not had this problem soonerbrain
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@4914 e03df62e-2008-0410-955e-edbf42e46eb7
2006-08-11Just to mess with om's head, remove helperfuncs.h from everywherebrain
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@4900 e03df62e-2008-0410-955e-edbf42e46eb7
2006-08-11Now two types of log macro, log() and ilog(). log() assumes an InspIRCd ↵brain
object called ServerInstance, ilog() takes an InspIRCd object as first param. TODO: Run a regexp over these, using perl, to translate them into InspIRCd::Log calls and then eliminate the macro :) git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@4879 e03df62e-2008-0410-955e-edbf42e46eb7
2006-07-19Whoops, forgot SocketEngine::SocketEngine() gets called recursively from ↵brain
*Engine::*Engine() (where * is the type being built) git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@4441 e03df62e-2008-0410-955e-edbf42e46eb7
2006-07-19* Seperate out socket engines into derived classes of SocketEngine.brain
* Add a classfactory SocketEngineFactory to create a new socketengine of the configured type * Implement configure hax to compile only the required socketengine and the base class * Eliminates ugly defines, and is more in line with C++ ways git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@4439 e03df62e-2008-0410-955e-edbf42e46eb7
2006-06-29Change log() to a #define, the real symbol is now do_log(), the new macro ↵om
auto-prefixes all log messages with the file and line number where log() was called - should be nice for debugging and telling wtf is coming from what.Currently uses a (probably very standard) g++ extension to make the macro work. Shouldn't be an issue. You must make clean and rebuild all of insp. git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@4081 e03df62e-2008-0410-955e-edbf42e46eb7
2006-05-16Check for failed epoll or kqueuebrain
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@3961 e03df62e-2008-0410-955e-edbf42e46eb7
2006-03-11Added method to check if an fd is in the socketengine or notbrain
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@3667 e03df62e-2008-0410-955e-edbf42e46eb7
2006-03-07Tweaks to socket engine, faster buffer flush and hopefully more stablebrain
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@3521 e03df62e-2008-0410-955e-edbf42e46eb7
2006-02-26Valgrind fixesbrain
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@3353 e03df62e-2008-0410-955e-edbf42e46eb7