int bind_port;
/** Human-readable bind description */
std::string bind_desc;
+
+ class IOHookProvRef : public dynamic_reference_nocheck<IOHookProvider>
+ {
+ public:
+ IOHookProvRef()
+ : dynamic_reference_nocheck<IOHookProvider>(NULL, std::string())
+ {
+ }
+ };
+
+ typedef TR1NS::array<IOHookProvRef, 2> IOHookProvList;
+
+ /** IOHook providers for handling connections on this socket,
+ * may be empty.
+ */
+ IOHookProvList iohookprovs;
+
/** Create a new listening socket
*/
ListenSocket(ConfigTag* tag, const irc::sockets::sockaddrs& bind_to);
- /** Handle an I/O event
- */
- void HandleEvent(EventType et, int errornum = 0);
/** Close the socket
*/
~ListenSocket();
- /** Handles sockets internals crap of a connection, convenience wrapper really
+ /** Handles new connections, called by the socket engine
+ */
+ void OnEventHandlerRead() CXX11_OVERRIDE;
+
+ /** Inspects the bind block belonging to this socket to set the name of the IO hook
+ * provider which this socket will use for incoming connections.
*/
- void AcceptInternal();
+ void ResetIOHookProvider();
};