+bool wxSelectDispatcher::RegisterFD(int fd, wxFDIOHandler *handler, int flags)
+{
+ if ( !wxMappedFDIODispatcher::RegisterFD(fd, handler, flags) )
+ return false;
+
+ if ( !m_sets.SetFD(fd, flags) )
+ return false;
+
+ if ( fd > m_maxFD )
+ m_maxFD = fd;
+
+ return true;
+}
+
+bool wxSelectDispatcher::ModifyFD(int fd, wxFDIOHandler *handler, int flags)
+{
+ if ( !wxMappedFDIODispatcher::ModifyFD(fd, handler, flags) )
+ return false;
+
+ wxASSERT_MSG( fd <= m_maxFD, _T("logic error: registered fd > m_maxFD?") );
+
+ return m_sets.SetFD(fd, flags);
+}
+
+bool wxSelectDispatcher::UnregisterFD(int fd)
+{
+ m_sets.ClearFD(fd);
+
+ if ( !wxMappedFDIODispatcher::UnregisterFD(fd) )
+ return false;
+
+ // remove the handler if we don't need it any more
+ if ( !m_sets.HasFD(fd) )
+ {
+ if ( fd == m_maxFD )