X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=include%2Fsocketengine.h;h=d8d5e406dc5c28a0fc924e9fc6d7b91a23b53407;hb=c05f81cac83e80c7727594e3929e0709eccca689;hp=0187a043ed7168adb7cc3b06b4dcdbb4e969b6d6;hpb=d23c030c9a8fd58807438245a004e4aa5b7288ba;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/include/socketengine.h b/include/socketengine.h index 0187a043e..d8d5e406d 100644 --- a/include/socketengine.h +++ b/include/socketengine.h @@ -1,10 +1,15 @@ /* * InspIRCd -- Internet Relay Chat Daemon * - * Copyright (C) 2009 Daniel De Graaf - * Copyright (C) 2007-2008 Robin Burchell - * Copyright (C) 2005-2007 Craig Edwards + * Copyright (C) 2013-2016 Attila Molnar + * Copyright (C) 2013-2014 Adam + * Copyright (C) 2012-2013, 2017-2020 Sadie Powell + * Copyright (C) 2012 Robby + * Copyright (C) 2009-2010 Daniel De Graaf + * Copyright (C) 2009 Uli Schlachter + * Copyright (C) 2007-2008, 2017 Robin Burchell * Copyright (C) 2007 Dennis Friis + * Copyright (C) 2005-2008 Craig Edwards * * This file is part of InspIRCd. InspIRCd is free software: you can * redistribute it and/or modify it under the terms of the GNU General Public @@ -22,10 +27,7 @@ #pragma once -#include #include -#include -#include "config.h" #include "socket.h" #include "base.h" @@ -164,15 +166,24 @@ class CoreExport EventHandler : public classbase * registered with the SocketEngine */ int fd; + + /** Swaps the internals of this EventHandler with another one. + * @param other A EventHandler to swap internals with. + */ + void SwapInternals(EventHandler& other); + public: /** Get the current file descriptor * @return The file descriptor of this handler */ inline int GetFd() const { return fd; } + /** Checks if this event handler has a fd associated with it. */ + inline bool HasFd() const { return fd >= 0; } + inline int GetEventMask() const { return event_mask; } - /** Set a new file desciptor + /** Set a new file descriptor * @param FD The new file descriptor. Do not call this method without * first deleting the object from the SocketEngine if you have * added it to a SocketEngine instance. @@ -298,7 +309,7 @@ class CoreExport SocketEngine static void ResizeDouble(std::vector& vect) { if (SocketEngine::CurrentSetSize > vect.size()) - vect.resize(vect.size() * 2); + vect.resize(SocketEngine::CurrentSetSize * 2); } public: @@ -315,8 +326,6 @@ public: * failure (for example, you try and enable * epoll on a 2.4 linux kernel) then this * function may bail back to the shell. - * @return void, but it is acceptable for this function to bail back to - * the shell or operating system on fatal error. */ static void Init(); @@ -378,7 +387,7 @@ public: static bool HasFd(int fd); /** Returns the EventHandler attached to a specific fd. - * If the fd isnt in the socketengine, returns NULL. + * If the fd isn't in the socketengine, returns NULL. * @param fd The event handler to look for * @return A pointer to the event handler, or NULL */ @@ -389,7 +398,7 @@ public: * number of events which occurred during this call. This method will * dispatch events to their handlers by calling their * EventHandler::OnEventHandler*() methods. - * @return The number of events which have occured. + * @return The number of events which have occurred. */ static int DispatchEvents(); @@ -484,20 +493,18 @@ public: * @param buf The buffer in which the data that is sent is stored. * @param len The size of the buffer. * @param flags A flag value that controls the sending of the data. - * @param to The remote IP address and port. - * @param tolen The size of the to parameter. + * @param address The remote IP address and port. * @return This method should return exactly the same values as the system call it emulates. */ - static int SendTo(EventHandler* fd, const void *buf, size_t len, int flags, const sockaddr *to, socklen_t tolen); + static int SendTo(EventHandler* fd, const void* buf, size_t len, int flags, const irc::sockets::sockaddrs& address); /** Abstraction for BSD sockets connect(2). * This function should emulate its namesake system call exactly. * @param fd This version of the call takes an EventHandler instead of a bare file descriptor. - * @param serv_addr The server IP address and port. - * @param addrlen The size of the sockaddr parameter. + * @param address The server IP address and port. * @return This method should return exactly the same values as the system call it emulates. */ - static int Connect(EventHandler* fd, const sockaddr *serv_addr, socklen_t addrlen); + static int Connect(EventHandler* fd, const irc::sockets::sockaddrs& address); /** Make a file descriptor blocking. * @param fd a file descriptor to set to blocking mode @@ -547,8 +554,6 @@ public: * allows for the socket engine to re-create its handle * after the daemon forks as the socket engine is created * long BEFORE the daemon forks. - * @return void, but it is acceptable for this function to bail back to - * the shell or operating system on fatal error. */ static void RecoverFromFork();