]> git.saurik.com Git - wxWidgets.git/commitdiff
Cleanly separate GUI socket-related code from net library.
authorVadim Zeitlin <vadim@wxwidgets.org>
Mon, 17 Aug 2009 23:02:46 +0000 (23:02 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Mon, 17 Aug 2009 23:02:46 +0000 (23:02 +0000)
This fixes linking problems under Unix introduced by recent changes which
fixed previous problems which were due to files not being linked in at all.

In order to provide a clean separation between base, net and core libraries we
now use the same wxSocketManager (wxSocketFDBasedManager), defined in net
library for both console and GUI Unix applications and just use different FD
IO manager for them: the latter can be defined in base and core libraries as
it doesn't involve wxSocketImpl at all, only its base wxFDIOHandler class.

At more detailed level, these changes required:
 1. Adding the new wxFDIOManager class.
 2. Refactoring the old (and now removed) wxSocketFDIOManager to use the same
    code as wxSocketFDIOManager. This involved:
  a) Adding handler and direction parameter to RemoveInput().
  b) Storing the mask of registered events in wxFDIOHandler itself.
  c) Defining wxFDIOManagerUnix which works with wxFDIODispatcher.
 3. Changing the traits classes in Unix ports to define GetFDIOManager()
    instead of GetSocketManager().

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@61688 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

16 files changed:
Makefile.in
build/bakefiles/files.bkl
include/wx/os2/apptbase.h
include/wx/os2/apptrait.h
include/wx/private/fdiohandler.h
include/wx/private/fdiomanager.h [new file with mode: 0644]
include/wx/unix/apptbase.h
include/wx/unix/apptrait.h
include/wx/unix/private/fdiounix.h [new file with mode: 0644]
include/wx/unix/private/sockunix.h
src/common/socketiohandler.cpp
src/gtk/sockgtk.cpp
src/gtk1/sockgtk.cpp
src/motif/sockmot.cpp
src/os2/sockpm.cpp
src/unix/fdiounix.cpp [new file with mode: 0644]

index 2832d3886f734456048c1fe617505288a550d294..f371c70cb615edca2ccb18bdb9c354ac5492de5a 100644 (file)
@@ -746,16 +746,17 @@ ALL_BASE_SOURCES =  \
        src/common/zstream.cpp \
        src/common/fdiodispatcher.cpp \
        src/common/selectdispatcher.cpp \
-       src/unix/epolldispatcher.cpp \
        src/unix/appunix.cpp \
-       src/unix/evtloopunix.cpp \
        src/unix/dir.cpp \
        src/unix/dlunix.cpp \
+       src/unix/epolldispatcher.cpp \
+       src/unix/evtloopunix.cpp \
+       src/unix/fdiounix.cpp \
        src/unix/snglinst.cpp \
+       src/unix/stackwalk.cpp \
        src/unix/stdpaths.cpp \
        src/unix/timerunx.cpp \
        src/unix/threadpsx.cpp \
-       src/unix/stackwalk.cpp \
        src/unix/utilsunx.cpp \
        src/unix/mimetype.cpp \
        src/msw/basemsw.cpp \
@@ -1965,16 +1966,17 @@ COND_USE_STC_1___wxscintilla___depname = \
 COND_TOOLKIT__BASE_OSX_SRC =  \
        src/common/fdiodispatcher.cpp \
        src/common/selectdispatcher.cpp \
-       src/unix/epolldispatcher.cpp \
        src/unix/appunix.cpp \
-       src/unix/evtloopunix.cpp \
        src/unix/dir.cpp \
        src/unix/dlunix.cpp \
+       src/unix/epolldispatcher.cpp \
+       src/unix/evtloopunix.cpp \
+       src/unix/fdiounix.cpp \
        src/unix/snglinst.cpp \
+       src/unix/stackwalk.cpp \
        src/unix/stdpaths.cpp \
        src/unix/timerunx.cpp \
        src/unix/threadpsx.cpp \
-       src/unix/stackwalk.cpp \
        src/unix/utilsunx.cpp \
        src/unix/mimetype.cpp \
        src/osx/core/cfstring.cpp \
@@ -1985,16 +1987,17 @@ COND_TOOLKIT__BASE_OSX_SRC =  \
 COND_TOOLKIT_COCOA_BASE_OSX_SRC =  \
        src/common/fdiodispatcher.cpp \
        src/common/selectdispatcher.cpp \
-       src/unix/epolldispatcher.cpp \
        src/unix/appunix.cpp \
-       src/unix/evtloopunix.cpp \
        src/unix/dir.cpp \
        src/unix/dlunix.cpp \
+       src/unix/epolldispatcher.cpp \
+       src/unix/evtloopunix.cpp \
+       src/unix/fdiounix.cpp \
        src/unix/snglinst.cpp \
+       src/unix/stackwalk.cpp \
        src/unix/stdpaths.cpp \
        src/unix/timerunx.cpp \
        src/unix/threadpsx.cpp \
-       src/unix/stackwalk.cpp \
        src/unix/utilsunx.cpp \
        src/unix/mimetype.cpp \
        src/osx/core/cfstring.cpp \
@@ -2005,16 +2008,17 @@ COND_TOOLKIT_COCOA_BASE_OSX_SRC =  \
 COND_TOOLKIT_GTK_BASE_OSX_SRC =  \
        src/common/fdiodispatcher.cpp \
        src/common/selectdispatcher.cpp \
-       src/unix/epolldispatcher.cpp \
        src/unix/appunix.cpp \
-       src/unix/evtloopunix.cpp \
        src/unix/dir.cpp \
        src/unix/dlunix.cpp \
+       src/unix/epolldispatcher.cpp \
+       src/unix/evtloopunix.cpp \
+       src/unix/fdiounix.cpp \
        src/unix/snglinst.cpp \
+       src/unix/stackwalk.cpp \
        src/unix/stdpaths.cpp \
        src/unix/timerunx.cpp \
        src/unix/threadpsx.cpp \
-       src/unix/stackwalk.cpp \
        src/unix/utilsunx.cpp \
        src/unix/mimetype.cpp \
        src/osx/core/cfstring.cpp \
@@ -2025,16 +2029,17 @@ COND_TOOLKIT_GTK_BASE_OSX_SRC =  \
 COND_TOOLKIT_MOTIF_BASE_OSX_SRC =  \
        src/common/fdiodispatcher.cpp \
        src/common/selectdispatcher.cpp \
-       src/unix/epolldispatcher.cpp \
        src/unix/appunix.cpp \
-       src/unix/evtloopunix.cpp \
        src/unix/dir.cpp \
        src/unix/dlunix.cpp \
+       src/unix/epolldispatcher.cpp \
+       src/unix/evtloopunix.cpp \
+       src/unix/fdiounix.cpp \
        src/unix/snglinst.cpp \
+       src/unix/stackwalk.cpp \
        src/unix/stdpaths.cpp \
        src/unix/timerunx.cpp \
        src/unix/threadpsx.cpp \
-       src/unix/stackwalk.cpp \
        src/unix/utilsunx.cpp \
        src/unix/mimetype.cpp \
        src/osx/core/cfstring.cpp \
@@ -2050,16 +2055,17 @@ COND_TOOLKIT_OSX_CARBON_BASE_OSX_SRC =  \
        src/osx/core/utilsexc_base.cpp \
        src/common/fdiodispatcher.cpp \
        src/common/selectdispatcher.cpp \
-       src/unix/epolldispatcher.cpp \
        src/unix/appunix.cpp \
-       src/unix/evtloopunix.cpp \
        src/unix/dir.cpp \
        src/unix/dlunix.cpp \
+       src/unix/epolldispatcher.cpp \
+       src/unix/evtloopunix.cpp \
+       src/unix/fdiounix.cpp \
        src/unix/snglinst.cpp \
+       src/unix/stackwalk.cpp \
        src/unix/stdpaths.cpp \
        src/unix/timerunx.cpp \
        src/unix/threadpsx.cpp \
-       src/unix/stackwalk.cpp \
        src/unix/utilsunx.cpp
 @COND_TOOLKIT_OSX_CARBON@BASE_OSX_SRC = $(COND_TOOLKIT_OSX_CARBON_BASE_OSX_SRC)
 COND_TOOLKIT_OSX_COCOA_BASE_OSX_SRC =  \
@@ -2070,31 +2076,33 @@ COND_TOOLKIT_OSX_COCOA_BASE_OSX_SRC =  \
        src/osx/core/utilsexc_base.cpp \
        src/common/fdiodispatcher.cpp \
        src/common/selectdispatcher.cpp \
-       src/unix/epolldispatcher.cpp \
        src/unix/appunix.cpp \
-       src/unix/evtloopunix.cpp \
        src/unix/dir.cpp \
        src/unix/dlunix.cpp \
+       src/unix/epolldispatcher.cpp \
+       src/unix/evtloopunix.cpp \
+       src/unix/fdiounix.cpp \
        src/unix/snglinst.cpp \
+       src/unix/stackwalk.cpp \
        src/unix/stdpaths.cpp \
        src/unix/timerunx.cpp \
        src/unix/threadpsx.cpp \
-       src/unix/stackwalk.cpp \
        src/unix/utilsunx.cpp
 @COND_TOOLKIT_OSX_COCOA@BASE_OSX_SRC = $(COND_TOOLKIT_OSX_COCOA_BASE_OSX_SRC)
 COND_TOOLKIT_X11_BASE_OSX_SRC =  \
        src/common/fdiodispatcher.cpp \
        src/common/selectdispatcher.cpp \
-       src/unix/epolldispatcher.cpp \
        src/unix/appunix.cpp \
-       src/unix/evtloopunix.cpp \
        src/unix/dir.cpp \
        src/unix/dlunix.cpp \
+       src/unix/epolldispatcher.cpp \
+       src/unix/evtloopunix.cpp \
+       src/unix/fdiounix.cpp \
        src/unix/snglinst.cpp \
+       src/unix/stackwalk.cpp \
        src/unix/stdpaths.cpp \
        src/unix/timerunx.cpp \
        src/unix/threadpsx.cpp \
-       src/unix/stackwalk.cpp \
        src/unix/utilsunx.cpp \
        src/unix/mimetype.cpp \
        src/osx/core/cfstring.cpp \
@@ -3854,16 +3862,17 @@ COND_PLATFORM_MACOSX_1___BASE_PLATFORM_SRC_OBJECTS =  \
        monodll_utilsexc_base.o \
        monodll_fdiodispatcher.o \
        monodll_selectdispatcher.o \
-       monodll_epolldispatcher.o \
        monodll_appunix.o \
-       monodll_evtloopunix.o \
        monodll_unix_dir.o \
        monodll_dlunix.o \
+       monodll_epolldispatcher.o \
+       monodll_evtloopunix.o \
+       monodll_fdiounix.o \
        monodll_unix_snglinst.o \
+       monodll_unix_stackwalk.o \
        monodll_unix_stdpaths.o \
        monodll_timerunx.o \
        monodll_threadpsx.o \
-       monodll_unix_stackwalk.o \
        monodll_utilsunx.o
 @COND_PLATFORM_MACOSX_1@__BASE_PLATFORM_SRC_OBJECTS = $(COND_PLATFORM_MACOSX_1___BASE_PLATFORM_SRC_OBJECTS)
 @COND_PLATFORM_MSDOS_1@__BASE_PLATFORM_SRC_OBJECTS = \
@@ -3886,16 +3895,17 @@ COND_PLATFORM_OS2_1___BASE_PLATFORM_SRC_OBJECTS =  \
 COND_PLATFORM_UNIX_1___BASE_PLATFORM_SRC_OBJECTS =  \
        monodll_fdiodispatcher.o \
        monodll_selectdispatcher.o \
-       monodll_epolldispatcher.o \
        monodll_appunix.o \
-       monodll_evtloopunix.o \
        monodll_unix_dir.o \
        monodll_dlunix.o \
+       monodll_epolldispatcher.o \
+       monodll_evtloopunix.o \
+       monodll_fdiounix.o \
        monodll_unix_snglinst.o \
+       monodll_unix_stackwalk.o \
        monodll_unix_stdpaths.o \
        monodll_timerunx.o \
        monodll_threadpsx.o \
-       monodll_unix_stackwalk.o \
        monodll_utilsunx.o \
        monodll_unix_mimetype.o
 @COND_PLATFORM_UNIX_1@__BASE_PLATFORM_SRC_OBJECTS = $(COND_PLATFORM_UNIX_1___BASE_PLATFORM_SRC_OBJECTS)
@@ -5652,16 +5662,17 @@ COND_PLATFORM_MACOSX_1___BASE_PLATFORM_SRC_OBJECTS_1 =  \
        monolib_utilsexc_base.o \
        monolib_fdiodispatcher.o \
        monolib_selectdispatcher.o \
-       monolib_epolldispatcher.o \
        monolib_appunix.o \
-       monolib_evtloopunix.o \
        monolib_unix_dir.o \
        monolib_dlunix.o \
+       monolib_epolldispatcher.o \
+       monolib_evtloopunix.o \
+       monolib_fdiounix.o \
        monolib_unix_snglinst.o \
+       monolib_unix_stackwalk.o \
        monolib_unix_stdpaths.o \
        monolib_timerunx.o \
        monolib_threadpsx.o \
-       monolib_unix_stackwalk.o \
        monolib_utilsunx.o
 @COND_PLATFORM_MACOSX_1@__BASE_PLATFORM_SRC_OBJECTS_1 = $(COND_PLATFORM_MACOSX_1___BASE_PLATFORM_SRC_OBJECTS_1)
 @COND_PLATFORM_MSDOS_1@__BASE_PLATFORM_SRC_OBJECTS_1 \
@@ -5684,16 +5695,17 @@ COND_PLATFORM_OS2_1___BASE_PLATFORM_SRC_OBJECTS_1 =  \
 COND_PLATFORM_UNIX_1___BASE_PLATFORM_SRC_OBJECTS_1 =  \
        monolib_fdiodispatcher.o \
        monolib_selectdispatcher.o \
-       monolib_epolldispatcher.o \
        monolib_appunix.o \
-       monolib_evtloopunix.o \
        monolib_unix_dir.o \
        monolib_dlunix.o \
+       monolib_epolldispatcher.o \
+       monolib_evtloopunix.o \
+       monolib_fdiounix.o \
        monolib_unix_snglinst.o \
+       monolib_unix_stackwalk.o \
        monolib_unix_stdpaths.o \
        monolib_timerunx.o \
        monolib_threadpsx.o \
-       monolib_unix_stackwalk.o \
        monolib_utilsunx.o \
        monolib_unix_mimetype.o
 @COND_PLATFORM_UNIX_1@__BASE_PLATFORM_SRC_OBJECTS_1 = $(COND_PLATFORM_UNIX_1___BASE_PLATFORM_SRC_OBJECTS_1)
@@ -7487,16 +7499,17 @@ COND_PLATFORM_MACOSX_1___BASE_PLATFORM_SRC_OBJECTS_2 =  \
        basedll_utilsexc_base.o \
        basedll_fdiodispatcher.o \
        basedll_selectdispatcher.o \
-       basedll_epolldispatcher.o \
        basedll_appunix.o \
-       basedll_evtloopunix.o \
        basedll_unix_dir.o \
        basedll_dlunix.o \
+       basedll_epolldispatcher.o \
+       basedll_evtloopunix.o \
+       basedll_fdiounix.o \
        basedll_unix_snglinst.o \
+       basedll_unix_stackwalk.o \
        basedll_unix_stdpaths.o \
        basedll_timerunx.o \
        basedll_threadpsx.o \
-       basedll_unix_stackwalk.o \
        basedll_utilsunx.o
 @COND_PLATFORM_MACOSX_1@__BASE_PLATFORM_SRC_OBJECTS_2 = $(COND_PLATFORM_MACOSX_1___BASE_PLATFORM_SRC_OBJECTS_2)
 @COND_PLATFORM_MSDOS_1@__BASE_PLATFORM_SRC_OBJECTS_2 \
@@ -7519,16 +7532,17 @@ COND_PLATFORM_OS2_1___BASE_PLATFORM_SRC_OBJECTS_2 =  \
 COND_PLATFORM_UNIX_1___BASE_PLATFORM_SRC_OBJECTS_2 =  \
        basedll_fdiodispatcher.o \
        basedll_selectdispatcher.o \
-       basedll_epolldispatcher.o \
        basedll_appunix.o \
-       basedll_evtloopunix.o \
        basedll_unix_dir.o \
        basedll_dlunix.o \
+       basedll_epolldispatcher.o \
+       basedll_evtloopunix.o \
+       basedll_fdiounix.o \
        basedll_unix_snglinst.o \
+       basedll_unix_stackwalk.o \
        basedll_unix_stdpaths.o \
        basedll_timerunx.o \
        basedll_threadpsx.o \
-       basedll_unix_stackwalk.o \
        basedll_utilsunx.o \
        basedll_unix_mimetype.o
 @COND_PLATFORM_UNIX_1@__BASE_PLATFORM_SRC_OBJECTS_2 = $(COND_PLATFORM_UNIX_1___BASE_PLATFORM_SRC_OBJECTS_2)
@@ -7580,16 +7594,17 @@ COND_PLATFORM_MACOSX_1___BASE_PLATFORM_SRC_OBJECTS_3 =  \
        baselib_utilsexc_base.o \
        baselib_fdiodispatcher.o \
        baselib_selectdispatcher.o \
-       baselib_epolldispatcher.o \
        baselib_appunix.o \
-       baselib_evtloopunix.o \
        baselib_unix_dir.o \
        baselib_dlunix.o \
+       baselib_epolldispatcher.o \
+       baselib_evtloopunix.o \
+       baselib_fdiounix.o \
        baselib_unix_snglinst.o \
+       baselib_unix_stackwalk.o \
        baselib_unix_stdpaths.o \
        baselib_timerunx.o \
        baselib_threadpsx.o \
-       baselib_unix_stackwalk.o \
        baselib_utilsunx.o
 @COND_PLATFORM_MACOSX_1@__BASE_PLATFORM_SRC_OBJECTS_3 = $(COND_PLATFORM_MACOSX_1___BASE_PLATFORM_SRC_OBJECTS_3)
 @COND_PLATFORM_MSDOS_1@__BASE_PLATFORM_SRC_OBJECTS_3 \
@@ -7612,16 +7627,17 @@ COND_PLATFORM_OS2_1___BASE_PLATFORM_SRC_OBJECTS_3 =  \
 COND_PLATFORM_UNIX_1___BASE_PLATFORM_SRC_OBJECTS_3 =  \
        baselib_fdiodispatcher.o \
        baselib_selectdispatcher.o \
-       baselib_epolldispatcher.o \
        baselib_appunix.o \
-       baselib_evtloopunix.o \
        baselib_unix_dir.o \
        baselib_dlunix.o \
+       baselib_epolldispatcher.o \
+       baselib_evtloopunix.o \
+       baselib_fdiounix.o \
        baselib_unix_snglinst.o \
+       baselib_unix_stackwalk.o \
        baselib_unix_stdpaths.o \
        baselib_timerunx.o \
        baselib_threadpsx.o \
-       baselib_unix_stackwalk.o \
        baselib_utilsunx.o \
        baselib_unix_mimetype.o
 @COND_PLATFORM_UNIX_1@__BASE_PLATFORM_SRC_OBJECTS_3 = $(COND_PLATFORM_UNIX_1___BASE_PLATFORM_SRC_OBJECTS_3)
@@ -16007,12 +16023,6 @@ monodll_sound_sdl.o: $(srcdir)/src/unix/sound_sdl.cpp $(MONODLL_ODEP)
 @COND_PLATFORM_OS2_1@monodll_selectdispatcher.o: $(srcdir)/src/common/selectdispatcher.cpp $(MONODLL_ODEP)
 @COND_PLATFORM_OS2_1@  $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/common/selectdispatcher.cpp
 
-@COND_PLATFORM_UNIX_1@monodll_epolldispatcher.o: $(srcdir)/src/unix/epolldispatcher.cpp $(MONODLL_ODEP)
-@COND_PLATFORM_UNIX_1@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/unix/epolldispatcher.cpp
-
-@COND_PLATFORM_MACOSX_1@monodll_epolldispatcher.o: $(srcdir)/src/unix/epolldispatcher.cpp $(MONODLL_ODEP)
-@COND_PLATFORM_MACOSX_1@       $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/unix/epolldispatcher.cpp
-
 @COND_PLATFORM_UNIX_1@monodll_appunix.o: $(srcdir)/src/unix/appunix.cpp $(MONODLL_ODEP)
 @COND_PLATFORM_UNIX_1@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/unix/appunix.cpp
 
@@ -16022,15 +16032,6 @@ monodll_sound_sdl.o: $(srcdir)/src/unix/sound_sdl.cpp $(MONODLL_ODEP)
 @COND_PLATFORM_OS2_1@monodll_appunix.o: $(srcdir)/src/unix/appunix.cpp $(MONODLL_ODEP)
 @COND_PLATFORM_OS2_1@  $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/unix/appunix.cpp
 
-@COND_PLATFORM_UNIX_1@monodll_evtloopunix.o: $(srcdir)/src/unix/evtloopunix.cpp $(MONODLL_ODEP)
-@COND_PLATFORM_UNIX_1@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/unix/evtloopunix.cpp
-
-@COND_PLATFORM_MACOSX_1@monodll_evtloopunix.o: $(srcdir)/src/unix/evtloopunix.cpp $(MONODLL_ODEP)
-@COND_PLATFORM_MACOSX_1@       $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/unix/evtloopunix.cpp
-
-@COND_PLATFORM_OS2_1@monodll_evtloopunix.o: $(srcdir)/src/unix/evtloopunix.cpp $(MONODLL_ODEP)
-@COND_PLATFORM_OS2_1@  $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/unix/evtloopunix.cpp
-
 @COND_PLATFORM_UNIX_1@monodll_unix_dir.o: $(srcdir)/src/unix/dir.cpp $(MONODLL_ODEP)
 @COND_PLATFORM_UNIX_1@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/unix/dir.cpp
 
@@ -16043,12 +16044,39 @@ monodll_sound_sdl.o: $(srcdir)/src/unix/sound_sdl.cpp $(MONODLL_ODEP)
 @COND_PLATFORM_MACOSX_1@monodll_dlunix.o: $(srcdir)/src/unix/dlunix.cpp $(MONODLL_ODEP)
 @COND_PLATFORM_MACOSX_1@       $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/unix/dlunix.cpp
 
+@COND_PLATFORM_UNIX_1@monodll_epolldispatcher.o: $(srcdir)/src/unix/epolldispatcher.cpp $(MONODLL_ODEP)
+@COND_PLATFORM_UNIX_1@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/unix/epolldispatcher.cpp
+
+@COND_PLATFORM_MACOSX_1@monodll_epolldispatcher.o: $(srcdir)/src/unix/epolldispatcher.cpp $(MONODLL_ODEP)
+@COND_PLATFORM_MACOSX_1@       $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/unix/epolldispatcher.cpp
+
+@COND_PLATFORM_UNIX_1@monodll_evtloopunix.o: $(srcdir)/src/unix/evtloopunix.cpp $(MONODLL_ODEP)
+@COND_PLATFORM_UNIX_1@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/unix/evtloopunix.cpp
+
+@COND_PLATFORM_MACOSX_1@monodll_evtloopunix.o: $(srcdir)/src/unix/evtloopunix.cpp $(MONODLL_ODEP)
+@COND_PLATFORM_MACOSX_1@       $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/unix/evtloopunix.cpp
+
+@COND_PLATFORM_OS2_1@monodll_evtloopunix.o: $(srcdir)/src/unix/evtloopunix.cpp $(MONODLL_ODEP)
+@COND_PLATFORM_OS2_1@  $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/unix/evtloopunix.cpp
+
+@COND_PLATFORM_UNIX_1@monodll_fdiounix.o: $(srcdir)/src/unix/fdiounix.cpp $(MONODLL_ODEP)
+@COND_PLATFORM_UNIX_1@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/unix/fdiounix.cpp
+
+@COND_PLATFORM_MACOSX_1@monodll_fdiounix.o: $(srcdir)/src/unix/fdiounix.cpp $(MONODLL_ODEP)
+@COND_PLATFORM_MACOSX_1@       $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/unix/fdiounix.cpp
+
 @COND_PLATFORM_UNIX_1@monodll_unix_snglinst.o: $(srcdir)/src/unix/snglinst.cpp $(MONODLL_ODEP)
 @COND_PLATFORM_UNIX_1@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/unix/snglinst.cpp
 
 @COND_PLATFORM_MACOSX_1@monodll_unix_snglinst.o: $(srcdir)/src/unix/snglinst.cpp $(MONODLL_ODEP)
 @COND_PLATFORM_MACOSX_1@       $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/unix/snglinst.cpp
 
+@COND_PLATFORM_UNIX_1@monodll_unix_stackwalk.o: $(srcdir)/src/unix/stackwalk.cpp $(MONODLL_ODEP)
+@COND_PLATFORM_UNIX_1@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/unix/stackwalk.cpp
+
+@COND_PLATFORM_MACOSX_1@monodll_unix_stackwalk.o: $(srcdir)/src/unix/stackwalk.cpp $(MONODLL_ODEP)
+@COND_PLATFORM_MACOSX_1@       $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/unix/stackwalk.cpp
+
 @COND_PLATFORM_UNIX_1@monodll_unix_stdpaths.o: $(srcdir)/src/unix/stdpaths.cpp $(MONODLL_ODEP)
 @COND_PLATFORM_UNIX_1@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/unix/stdpaths.cpp
 
@@ -16070,12 +16098,6 @@ monodll_sound_sdl.o: $(srcdir)/src/unix/sound_sdl.cpp $(MONODLL_ODEP)
 @COND_PLATFORM_MACOSX_1@monodll_threadpsx.o: $(srcdir)/src/unix/threadpsx.cpp $(MONODLL_ODEP)
 @COND_PLATFORM_MACOSX_1@       $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/unix/threadpsx.cpp
 
-@COND_PLATFORM_UNIX_1@monodll_unix_stackwalk.o: $(srcdir)/src/unix/stackwalk.cpp $(MONODLL_ODEP)
-@COND_PLATFORM_UNIX_1@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/unix/stackwalk.cpp
-
-@COND_PLATFORM_MACOSX_1@monodll_unix_stackwalk.o: $(srcdir)/src/unix/stackwalk.cpp $(MONODLL_ODEP)
-@COND_PLATFORM_MACOSX_1@       $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/unix/stackwalk.cpp
-
 @COND_PLATFORM_UNIX_1@monodll_utilsunx.o: $(srcdir)/src/unix/utilsunx.cpp $(MONODLL_ODEP)
 @COND_PLATFORM_UNIX_1@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/unix/utilsunx.cpp
 
@@ -20729,12 +20751,6 @@ monolib_sound_sdl.o: $(srcdir)/src/unix/sound_sdl.cpp $(MONOLIB_ODEP)
 @COND_PLATFORM_OS2_1@monolib_selectdispatcher.o: $(srcdir)/src/common/selectdispatcher.cpp $(MONOLIB_ODEP)
 @COND_PLATFORM_OS2_1@  $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/common/selectdispatcher.cpp
 
-@COND_PLATFORM_UNIX_1@monolib_epolldispatcher.o: $(srcdir)/src/unix/epolldispatcher.cpp $(MONOLIB_ODEP)
-@COND_PLATFORM_UNIX_1@ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/unix/epolldispatcher.cpp
-
-@COND_PLATFORM_MACOSX_1@monolib_epolldispatcher.o: $(srcdir)/src/unix/epolldispatcher.cpp $(MONOLIB_ODEP)
-@COND_PLATFORM_MACOSX_1@       $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/unix/epolldispatcher.cpp
-
 @COND_PLATFORM_UNIX_1@monolib_appunix.o: $(srcdir)/src/unix/appunix.cpp $(MONOLIB_ODEP)
 @COND_PLATFORM_UNIX_1@ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/unix/appunix.cpp
 
@@ -20744,15 +20760,6 @@ monolib_sound_sdl.o: $(srcdir)/src/unix/sound_sdl.cpp $(MONOLIB_ODEP)
 @COND_PLATFORM_OS2_1@monolib_appunix.o: $(srcdir)/src/unix/appunix.cpp $(MONOLIB_ODEP)
 @COND_PLATFORM_OS2_1@  $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/unix/appunix.cpp
 
-@COND_PLATFORM_UNIX_1@monolib_evtloopunix.o: $(srcdir)/src/unix/evtloopunix.cpp $(MONOLIB_ODEP)
-@COND_PLATFORM_UNIX_1@ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/unix/evtloopunix.cpp
-
-@COND_PLATFORM_MACOSX_1@monolib_evtloopunix.o: $(srcdir)/src/unix/evtloopunix.cpp $(MONOLIB_ODEP)
-@COND_PLATFORM_MACOSX_1@       $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/unix/evtloopunix.cpp
-
-@COND_PLATFORM_OS2_1@monolib_evtloopunix.o: $(srcdir)/src/unix/evtloopunix.cpp $(MONOLIB_ODEP)
-@COND_PLATFORM_OS2_1@  $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/unix/evtloopunix.cpp
-
 @COND_PLATFORM_UNIX_1@monolib_unix_dir.o: $(srcdir)/src/unix/dir.cpp $(MONOLIB_ODEP)
 @COND_PLATFORM_UNIX_1@ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/unix/dir.cpp
 
@@ -20765,12 +20772,39 @@ monolib_sound_sdl.o: $(srcdir)/src/unix/sound_sdl.cpp $(MONOLIB_ODEP)
 @COND_PLATFORM_MACOSX_1@monolib_dlunix.o: $(srcdir)/src/unix/dlunix.cpp $(MONOLIB_ODEP)
 @COND_PLATFORM_MACOSX_1@       $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/unix/dlunix.cpp
 
+@COND_PLATFORM_UNIX_1@monolib_epolldispatcher.o: $(srcdir)/src/unix/epolldispatcher.cpp $(MONOLIB_ODEP)
+@COND_PLATFORM_UNIX_1@ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/unix/epolldispatcher.cpp
+
+@COND_PLATFORM_MACOSX_1@monolib_epolldispatcher.o: $(srcdir)/src/unix/epolldispatcher.cpp $(MONOLIB_ODEP)
+@COND_PLATFORM_MACOSX_1@       $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/unix/epolldispatcher.cpp
+
+@COND_PLATFORM_UNIX_1@monolib_evtloopunix.o: $(srcdir)/src/unix/evtloopunix.cpp $(MONOLIB_ODEP)
+@COND_PLATFORM_UNIX_1@ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/unix/evtloopunix.cpp
+
+@COND_PLATFORM_MACOSX_1@monolib_evtloopunix.o: $(srcdir)/src/unix/evtloopunix.cpp $(MONOLIB_ODEP)
+@COND_PLATFORM_MACOSX_1@       $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/unix/evtloopunix.cpp
+
+@COND_PLATFORM_OS2_1@monolib_evtloopunix.o: $(srcdir)/src/unix/evtloopunix.cpp $(MONOLIB_ODEP)
+@COND_PLATFORM_OS2_1@  $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/unix/evtloopunix.cpp
+
+@COND_PLATFORM_UNIX_1@monolib_fdiounix.o: $(srcdir)/src/unix/fdiounix.cpp $(MONOLIB_ODEP)
+@COND_PLATFORM_UNIX_1@ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/unix/fdiounix.cpp
+
+@COND_PLATFORM_MACOSX_1@monolib_fdiounix.o: $(srcdir)/src/unix/fdiounix.cpp $(MONOLIB_ODEP)
+@COND_PLATFORM_MACOSX_1@       $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/unix/fdiounix.cpp
+
 @COND_PLATFORM_UNIX_1@monolib_unix_snglinst.o: $(srcdir)/src/unix/snglinst.cpp $(MONOLIB_ODEP)
 @COND_PLATFORM_UNIX_1@ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/unix/snglinst.cpp
 
 @COND_PLATFORM_MACOSX_1@monolib_unix_snglinst.o: $(srcdir)/src/unix/snglinst.cpp $(MONOLIB_ODEP)
 @COND_PLATFORM_MACOSX_1@       $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/unix/snglinst.cpp
 
+@COND_PLATFORM_UNIX_1@monolib_unix_stackwalk.o: $(srcdir)/src/unix/stackwalk.cpp $(MONOLIB_ODEP)
+@COND_PLATFORM_UNIX_1@ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/unix/stackwalk.cpp
+
+@COND_PLATFORM_MACOSX_1@monolib_unix_stackwalk.o: $(srcdir)/src/unix/stackwalk.cpp $(MONOLIB_ODEP)
+@COND_PLATFORM_MACOSX_1@       $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/unix/stackwalk.cpp
+
 @COND_PLATFORM_UNIX_1@monolib_unix_stdpaths.o: $(srcdir)/src/unix/stdpaths.cpp $(MONOLIB_ODEP)
 @COND_PLATFORM_UNIX_1@ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/unix/stdpaths.cpp
 
@@ -20792,12 +20826,6 @@ monolib_sound_sdl.o: $(srcdir)/src/unix/sound_sdl.cpp $(MONOLIB_ODEP)
 @COND_PLATFORM_MACOSX_1@monolib_threadpsx.o: $(srcdir)/src/unix/threadpsx.cpp $(MONOLIB_ODEP)
 @COND_PLATFORM_MACOSX_1@       $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/unix/threadpsx.cpp
 
-@COND_PLATFORM_UNIX_1@monolib_unix_stackwalk.o: $(srcdir)/src/unix/stackwalk.cpp $(MONOLIB_ODEP)
-@COND_PLATFORM_UNIX_1@ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/unix/stackwalk.cpp
-
-@COND_PLATFORM_MACOSX_1@monolib_unix_stackwalk.o: $(srcdir)/src/unix/stackwalk.cpp $(MONOLIB_ODEP)
-@COND_PLATFORM_MACOSX_1@       $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/unix/stackwalk.cpp
-
 @COND_PLATFORM_UNIX_1@monolib_utilsunx.o: $(srcdir)/src/unix/utilsunx.cpp $(MONOLIB_ODEP)
 @COND_PLATFORM_UNIX_1@ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/unix/utilsunx.cpp
 
@@ -23861,12 +23889,6 @@ basedll_cocoa_utils.o: $(srcdir)/src/osx/cocoa/utils.mm $(BASEDLL_ODEP)
 @COND_PLATFORM_OS2_1@basedll_selectdispatcher.o: $(srcdir)/src/common/selectdispatcher.cpp $(BASEDLL_ODEP)
 @COND_PLATFORM_OS2_1@  $(CXXC) -c -o $@ $(BASEDLL_CXXFLAGS) $(srcdir)/src/common/selectdispatcher.cpp
 
-@COND_PLATFORM_UNIX_1@basedll_epolldispatcher.o: $(srcdir)/src/unix/epolldispatcher.cpp $(BASEDLL_ODEP)
-@COND_PLATFORM_UNIX_1@ $(CXXC) -c -o $@ $(BASEDLL_CXXFLAGS) $(srcdir)/src/unix/epolldispatcher.cpp
-
-@COND_PLATFORM_MACOSX_1@basedll_epolldispatcher.o: $(srcdir)/src/unix/epolldispatcher.cpp $(BASEDLL_ODEP)
-@COND_PLATFORM_MACOSX_1@       $(CXXC) -c -o $@ $(BASEDLL_CXXFLAGS) $(srcdir)/src/unix/epolldispatcher.cpp
-
 @COND_PLATFORM_UNIX_1@basedll_appunix.o: $(srcdir)/src/unix/appunix.cpp $(BASEDLL_ODEP)
 @COND_PLATFORM_UNIX_1@ $(CXXC) -c -o $@ $(BASEDLL_CXXFLAGS) $(srcdir)/src/unix/appunix.cpp
 
@@ -23876,15 +23898,6 @@ basedll_cocoa_utils.o: $(srcdir)/src/osx/cocoa/utils.mm $(BASEDLL_ODEP)
 @COND_PLATFORM_OS2_1@basedll_appunix.o: $(srcdir)/src/unix/appunix.cpp $(BASEDLL_ODEP)
 @COND_PLATFORM_OS2_1@  $(CXXC) -c -o $@ $(BASEDLL_CXXFLAGS) $(srcdir)/src/unix/appunix.cpp
 
-@COND_PLATFORM_UNIX_1@basedll_evtloopunix.o: $(srcdir)/src/unix/evtloopunix.cpp $(BASEDLL_ODEP)
-@COND_PLATFORM_UNIX_1@ $(CXXC) -c -o $@ $(BASEDLL_CXXFLAGS) $(srcdir)/src/unix/evtloopunix.cpp
-
-@COND_PLATFORM_MACOSX_1@basedll_evtloopunix.o: $(srcdir)/src/unix/evtloopunix.cpp $(BASEDLL_ODEP)
-@COND_PLATFORM_MACOSX_1@       $(CXXC) -c -o $@ $(BASEDLL_CXXFLAGS) $(srcdir)/src/unix/evtloopunix.cpp
-
-@COND_PLATFORM_OS2_1@basedll_evtloopunix.o: $(srcdir)/src/unix/evtloopunix.cpp $(BASEDLL_ODEP)
-@COND_PLATFORM_OS2_1@  $(CXXC) -c -o $@ $(BASEDLL_CXXFLAGS) $(srcdir)/src/unix/evtloopunix.cpp
-
 @COND_PLATFORM_UNIX_1@basedll_unix_dir.o: $(srcdir)/src/unix/dir.cpp $(BASEDLL_ODEP)
 @COND_PLATFORM_UNIX_1@ $(CXXC) -c -o $@ $(BASEDLL_CXXFLAGS) $(srcdir)/src/unix/dir.cpp
 
@@ -23897,12 +23910,39 @@ basedll_cocoa_utils.o: $(srcdir)/src/osx/cocoa/utils.mm $(BASEDLL_ODEP)
 @COND_PLATFORM_MACOSX_1@basedll_dlunix.o: $(srcdir)/src/unix/dlunix.cpp $(BASEDLL_ODEP)
 @COND_PLATFORM_MACOSX_1@       $(CXXC) -c -o $@ $(BASEDLL_CXXFLAGS) $(srcdir)/src/unix/dlunix.cpp
 
+@COND_PLATFORM_UNIX_1@basedll_epolldispatcher.o: $(srcdir)/src/unix/epolldispatcher.cpp $(BASEDLL_ODEP)
+@COND_PLATFORM_UNIX_1@ $(CXXC) -c -o $@ $(BASEDLL_CXXFLAGS) $(srcdir)/src/unix/epolldispatcher.cpp
+
+@COND_PLATFORM_MACOSX_1@basedll_epolldispatcher.o: $(srcdir)/src/unix/epolldispatcher.cpp $(BASEDLL_ODEP)
+@COND_PLATFORM_MACOSX_1@       $(CXXC) -c -o $@ $(BASEDLL_CXXFLAGS) $(srcdir)/src/unix/epolldispatcher.cpp
+
+@COND_PLATFORM_UNIX_1@basedll_evtloopunix.o: $(srcdir)/src/unix/evtloopunix.cpp $(BASEDLL_ODEP)
+@COND_PLATFORM_UNIX_1@ $(CXXC) -c -o $@ $(BASEDLL_CXXFLAGS) $(srcdir)/src/unix/evtloopunix.cpp
+
+@COND_PLATFORM_MACOSX_1@basedll_evtloopunix.o: $(srcdir)/src/unix/evtloopunix.cpp $(BASEDLL_ODEP)
+@COND_PLATFORM_MACOSX_1@       $(CXXC) -c -o $@ $(BASEDLL_CXXFLAGS) $(srcdir)/src/unix/evtloopunix.cpp
+
+@COND_PLATFORM_OS2_1@basedll_evtloopunix.o: $(srcdir)/src/unix/evtloopunix.cpp $(BASEDLL_ODEP)
+@COND_PLATFORM_OS2_1@  $(CXXC) -c -o $@ $(BASEDLL_CXXFLAGS) $(srcdir)/src/unix/evtloopunix.cpp
+
+@COND_PLATFORM_UNIX_1@basedll_fdiounix.o: $(srcdir)/src/unix/fdiounix.cpp $(BASEDLL_ODEP)
+@COND_PLATFORM_UNIX_1@ $(CXXC) -c -o $@ $(BASEDLL_CXXFLAGS) $(srcdir)/src/unix/fdiounix.cpp
+
+@COND_PLATFORM_MACOSX_1@basedll_fdiounix.o: $(srcdir)/src/unix/fdiounix.cpp $(BASEDLL_ODEP)
+@COND_PLATFORM_MACOSX_1@       $(CXXC) -c -o $@ $(BASEDLL_CXXFLAGS) $(srcdir)/src/unix/fdiounix.cpp
+
 @COND_PLATFORM_UNIX_1@basedll_unix_snglinst.o: $(srcdir)/src/unix/snglinst.cpp $(BASEDLL_ODEP)
 @COND_PLATFORM_UNIX_1@ $(CXXC) -c -o $@ $(BASEDLL_CXXFLAGS) $(srcdir)/src/unix/snglinst.cpp
 
 @COND_PLATFORM_MACOSX_1@basedll_unix_snglinst.o: $(srcdir)/src/unix/snglinst.cpp $(BASEDLL_ODEP)
 @COND_PLATFORM_MACOSX_1@       $(CXXC) -c -o $@ $(BASEDLL_CXXFLAGS) $(srcdir)/src/unix/snglinst.cpp
 
+@COND_PLATFORM_UNIX_1@basedll_unix_stackwalk.o: $(srcdir)/src/unix/stackwalk.cpp $(BASEDLL_ODEP)
+@COND_PLATFORM_UNIX_1@ $(CXXC) -c -o $@ $(BASEDLL_CXXFLAGS) $(srcdir)/src/unix/stackwalk.cpp
+
+@COND_PLATFORM_MACOSX_1@basedll_unix_stackwalk.o: $(srcdir)/src/unix/stackwalk.cpp $(BASEDLL_ODEP)
+@COND_PLATFORM_MACOSX_1@       $(CXXC) -c -o $@ $(BASEDLL_CXXFLAGS) $(srcdir)/src/unix/stackwalk.cpp
+
 @COND_PLATFORM_UNIX_1@basedll_unix_stdpaths.o: $(srcdir)/src/unix/stdpaths.cpp $(BASEDLL_ODEP)
 @COND_PLATFORM_UNIX_1@ $(CXXC) -c -o $@ $(BASEDLL_CXXFLAGS) $(srcdir)/src/unix/stdpaths.cpp
 
@@ -23924,12 +23964,6 @@ basedll_cocoa_utils.o: $(srcdir)/src/osx/cocoa/utils.mm $(BASEDLL_ODEP)
 @COND_PLATFORM_MACOSX_1@basedll_threadpsx.o: $(srcdir)/src/unix/threadpsx.cpp $(BASEDLL_ODEP)
 @COND_PLATFORM_MACOSX_1@       $(CXXC) -c -o $@ $(BASEDLL_CXXFLAGS) $(srcdir)/src/unix/threadpsx.cpp
 
-@COND_PLATFORM_UNIX_1@basedll_unix_stackwalk.o: $(srcdir)/src/unix/stackwalk.cpp $(BASEDLL_ODEP)
-@COND_PLATFORM_UNIX_1@ $(CXXC) -c -o $@ $(BASEDLL_CXXFLAGS) $(srcdir)/src/unix/stackwalk.cpp
-
-@COND_PLATFORM_MACOSX_1@basedll_unix_stackwalk.o: $(srcdir)/src/unix/stackwalk.cpp $(BASEDLL_ODEP)
-@COND_PLATFORM_MACOSX_1@       $(CXXC) -c -o $@ $(BASEDLL_CXXFLAGS) $(srcdir)/src/unix/stackwalk.cpp
-
 @COND_PLATFORM_UNIX_1@basedll_utilsunx.o: $(srcdir)/src/unix/utilsunx.cpp $(BASEDLL_ODEP)
 @COND_PLATFORM_UNIX_1@ $(CXXC) -c -o $@ $(BASEDLL_CXXFLAGS) $(srcdir)/src/unix/utilsunx.cpp
 
@@ -24326,12 +24360,6 @@ baselib_cocoa_utils.o: $(srcdir)/src/osx/cocoa/utils.mm $(BASELIB_ODEP)
 @COND_PLATFORM_OS2_1@baselib_selectdispatcher.o: $(srcdir)/src/common/selectdispatcher.cpp $(BASELIB_ODEP)
 @COND_PLATFORM_OS2_1@  $(CXXC) -c -o $@ $(BASELIB_CXXFLAGS) $(srcdir)/src/common/selectdispatcher.cpp
 
-@COND_PLATFORM_UNIX_1@baselib_epolldispatcher.o: $(srcdir)/src/unix/epolldispatcher.cpp $(BASELIB_ODEP)
-@COND_PLATFORM_UNIX_1@ $(CXXC) -c -o $@ $(BASELIB_CXXFLAGS) $(srcdir)/src/unix/epolldispatcher.cpp
-
-@COND_PLATFORM_MACOSX_1@baselib_epolldispatcher.o: $(srcdir)/src/unix/epolldispatcher.cpp $(BASELIB_ODEP)
-@COND_PLATFORM_MACOSX_1@       $(CXXC) -c -o $@ $(BASELIB_CXXFLAGS) $(srcdir)/src/unix/epolldispatcher.cpp
-
 @COND_PLATFORM_UNIX_1@baselib_appunix.o: $(srcdir)/src/unix/appunix.cpp $(BASELIB_ODEP)
 @COND_PLATFORM_UNIX_1@ $(CXXC) -c -o $@ $(BASELIB_CXXFLAGS) $(srcdir)/src/unix/appunix.cpp
 
@@ -24341,15 +24369,6 @@ baselib_cocoa_utils.o: $(srcdir)/src/osx/cocoa/utils.mm $(BASELIB_ODEP)
 @COND_PLATFORM_OS2_1@baselib_appunix.o: $(srcdir)/src/unix/appunix.cpp $(BASELIB_ODEP)
 @COND_PLATFORM_OS2_1@  $(CXXC) -c -o $@ $(BASELIB_CXXFLAGS) $(srcdir)/src/unix/appunix.cpp
 
-@COND_PLATFORM_UNIX_1@baselib_evtloopunix.o: $(srcdir)/src/unix/evtloopunix.cpp $(BASELIB_ODEP)
-@COND_PLATFORM_UNIX_1@ $(CXXC) -c -o $@ $(BASELIB_CXXFLAGS) $(srcdir)/src/unix/evtloopunix.cpp
-
-@COND_PLATFORM_MACOSX_1@baselib_evtloopunix.o: $(srcdir)/src/unix/evtloopunix.cpp $(BASELIB_ODEP)
-@COND_PLATFORM_MACOSX_1@       $(CXXC) -c -o $@ $(BASELIB_CXXFLAGS) $(srcdir)/src/unix/evtloopunix.cpp
-
-@COND_PLATFORM_OS2_1@baselib_evtloopunix.o: $(srcdir)/src/unix/evtloopunix.cpp $(BASELIB_ODEP)
-@COND_PLATFORM_OS2_1@  $(CXXC) -c -o $@ $(BASELIB_CXXFLAGS) $(srcdir)/src/unix/evtloopunix.cpp
-
 @COND_PLATFORM_UNIX_1@baselib_unix_dir.o: $(srcdir)/src/unix/dir.cpp $(BASELIB_ODEP)
 @COND_PLATFORM_UNIX_1@ $(CXXC) -c -o $@ $(BASELIB_CXXFLAGS) $(srcdir)/src/unix/dir.cpp
 
@@ -24362,12 +24381,39 @@ baselib_cocoa_utils.o: $(srcdir)/src/osx/cocoa/utils.mm $(BASELIB_ODEP)
 @COND_PLATFORM_MACOSX_1@baselib_dlunix.o: $(srcdir)/src/unix/dlunix.cpp $(BASELIB_ODEP)
 @COND_PLATFORM_MACOSX_1@       $(CXXC) -c -o $@ $(BASELIB_CXXFLAGS) $(srcdir)/src/unix/dlunix.cpp
 
+@COND_PLATFORM_UNIX_1@baselib_epolldispatcher.o: $(srcdir)/src/unix/epolldispatcher.cpp $(BASELIB_ODEP)
+@COND_PLATFORM_UNIX_1@ $(CXXC) -c -o $@ $(BASELIB_CXXFLAGS) $(srcdir)/src/unix/epolldispatcher.cpp
+
+@COND_PLATFORM_MACOSX_1@baselib_epolldispatcher.o: $(srcdir)/src/unix/epolldispatcher.cpp $(BASELIB_ODEP)
+@COND_PLATFORM_MACOSX_1@       $(CXXC) -c -o $@ $(BASELIB_CXXFLAGS) $(srcdir)/src/unix/epolldispatcher.cpp
+
+@COND_PLATFORM_UNIX_1@baselib_evtloopunix.o: $(srcdir)/src/unix/evtloopunix.cpp $(BASELIB_ODEP)
+@COND_PLATFORM_UNIX_1@ $(CXXC) -c -o $@ $(BASELIB_CXXFLAGS) $(srcdir)/src/unix/evtloopunix.cpp
+
+@COND_PLATFORM_MACOSX_1@baselib_evtloopunix.o: $(srcdir)/src/unix/evtloopunix.cpp $(BASELIB_ODEP)
+@COND_PLATFORM_MACOSX_1@       $(CXXC) -c -o $@ $(BASELIB_CXXFLAGS) $(srcdir)/src/unix/evtloopunix.cpp
+
+@COND_PLATFORM_OS2_1@baselib_evtloopunix.o: $(srcdir)/src/unix/evtloopunix.cpp $(BASELIB_ODEP)
+@COND_PLATFORM_OS2_1@  $(CXXC) -c -o $@ $(BASELIB_CXXFLAGS) $(srcdir)/src/unix/evtloopunix.cpp
+
+@COND_PLATFORM_UNIX_1@baselib_fdiounix.o: $(srcdir)/src/unix/fdiounix.cpp $(BASELIB_ODEP)
+@COND_PLATFORM_UNIX_1@ $(CXXC) -c -o $@ $(BASELIB_CXXFLAGS) $(srcdir)/src/unix/fdiounix.cpp
+
+@COND_PLATFORM_MACOSX_1@baselib_fdiounix.o: $(srcdir)/src/unix/fdiounix.cpp $(BASELIB_ODEP)
+@COND_PLATFORM_MACOSX_1@       $(CXXC) -c -o $@ $(BASELIB_CXXFLAGS) $(srcdir)/src/unix/fdiounix.cpp
+
 @COND_PLATFORM_UNIX_1@baselib_unix_snglinst.o: $(srcdir)/src/unix/snglinst.cpp $(BASELIB_ODEP)
 @COND_PLATFORM_UNIX_1@ $(CXXC) -c -o $@ $(BASELIB_CXXFLAGS) $(srcdir)/src/unix/snglinst.cpp
 
 @COND_PLATFORM_MACOSX_1@baselib_unix_snglinst.o: $(srcdir)/src/unix/snglinst.cpp $(BASELIB_ODEP)
 @COND_PLATFORM_MACOSX_1@       $(CXXC) -c -o $@ $(BASELIB_CXXFLAGS) $(srcdir)/src/unix/snglinst.cpp
 
+@COND_PLATFORM_UNIX_1@baselib_unix_stackwalk.o: $(srcdir)/src/unix/stackwalk.cpp $(BASELIB_ODEP)
+@COND_PLATFORM_UNIX_1@ $(CXXC) -c -o $@ $(BASELIB_CXXFLAGS) $(srcdir)/src/unix/stackwalk.cpp
+
+@COND_PLATFORM_MACOSX_1@baselib_unix_stackwalk.o: $(srcdir)/src/unix/stackwalk.cpp $(BASELIB_ODEP)
+@COND_PLATFORM_MACOSX_1@       $(CXXC) -c -o $@ $(BASELIB_CXXFLAGS) $(srcdir)/src/unix/stackwalk.cpp
+
 @COND_PLATFORM_UNIX_1@baselib_unix_stdpaths.o: $(srcdir)/src/unix/stdpaths.cpp $(BASELIB_ODEP)
 @COND_PLATFORM_UNIX_1@ $(CXXC) -c -o $@ $(BASELIB_CXXFLAGS) $(srcdir)/src/unix/stdpaths.cpp
 
@@ -24389,12 +24435,6 @@ baselib_cocoa_utils.o: $(srcdir)/src/osx/cocoa/utils.mm $(BASELIB_ODEP)
 @COND_PLATFORM_MACOSX_1@baselib_threadpsx.o: $(srcdir)/src/unix/threadpsx.cpp $(BASELIB_ODEP)
 @COND_PLATFORM_MACOSX_1@       $(CXXC) -c -o $@ $(BASELIB_CXXFLAGS) $(srcdir)/src/unix/threadpsx.cpp
 
-@COND_PLATFORM_UNIX_1@baselib_unix_stackwalk.o: $(srcdir)/src/unix/stackwalk.cpp $(BASELIB_ODEP)
-@COND_PLATFORM_UNIX_1@ $(CXXC) -c -o $@ $(BASELIB_CXXFLAGS) $(srcdir)/src/unix/stackwalk.cpp
-
-@COND_PLATFORM_MACOSX_1@baselib_unix_stackwalk.o: $(srcdir)/src/unix/stackwalk.cpp $(BASELIB_ODEP)
-@COND_PLATFORM_MACOSX_1@       $(CXXC) -c -o $@ $(BASELIB_CXXFLAGS) $(srcdir)/src/unix/stackwalk.cpp
-
 @COND_PLATFORM_UNIX_1@baselib_utilsunx.o: $(srcdir)/src/unix/utilsunx.cpp $(BASELIB_ODEP)
 @COND_PLATFORM_UNIX_1@ $(CXXC) -c -o $@ $(BASELIB_CXXFLAGS) $(srcdir)/src/unix/utilsunx.cpp
 
index feb503bf6e35d26347b121ba8e0ab23d8dd52206..e43ccb2fa52ca585ac87e7a904db2ccd45044567 100644 (file)
@@ -63,6 +63,7 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file!
     src/unix/dlunix.cpp
     src/unix/epolldispatcher.cpp
     src/unix/evtloopunix.cpp
+    src/unix/fdiounix.cpp
     src/unix/snglinst.cpp
     src/unix/stackwalk.cpp
     src/unix/stdpaths.cpp
index 5916fda07dbc92658ebb8c045fe51db3cc043fbc..d1b9b494bd24cc8e27ac5983ba9ac87e83bb6a87 100644 (file)
@@ -27,11 +27,9 @@ public:
 
     // Clean up message queue.
     virtual void TerminateGui(unsigned long ulHab);
+
 #if wxUSE_SOCKETS
-    // returns the select()-based socket manager for console applications which
-    // is also used by some ports (wxX11, wxDFB) in the GUI build (hence it is
-    // here and not in wxConsoleAppTraits)
-    virtual wxSocketManager *GetSocketManager();
+    virtual wxFDIOManager *GetFDIOManager();
 #endif
 };
 
index 4038e880941428eaf6444dc229cead68189790da..2cdb32a4a8b5235584c4260cb84510c02f5f3694 100644 (file)
@@ -50,7 +50,7 @@ public:
     virtual wxString GetDesktopEnvironment() const;
 #endif
 #if wxUSE_SOCKETS
-    virtual wxSocketManager *GetSocketManager();
+    virtual wxFDIOManager *GetFDIOManager();
 #endif
 };
 
index 3e24c43786572c16bf133bb1fd35eeac5ad390b1..ad5f6b8f71ce1862c32224af817989c68a041a70 100644 (file)
@@ -18,6 +18,8 @@
 class wxFDIOHandler
 {
 public:
+    wxFDIOHandler() { m_regmask = 0; }
+
     // called when descriptor is available for non-blocking read
     virtual void OnReadWaiting() = 0;
 
@@ -31,8 +33,21 @@ public:
     // wxSocketImplUnix currently
     virtual bool IsOk() const { return true; }
 
+
+    // get/set the mask of events for which we're currently registered for:
+    // it's a combination of wxFDIO_{INPUT,OUTPUT,EXCEPTION}
+    int GetRegisteredEvents() const { return m_regmask; }
+    void SetRegisteredEvent(int flag) { m_regmask |= flag; }
+    void ClearRegisteredEvent(int flag) { m_regmask &= ~flag; }
+
+
     // virtual dtor for the base class
     virtual ~wxFDIOHandler() { }
+
+private:
+    int m_regmask;
+
+    wxDECLARE_NO_COPY_CLASS(wxFDIOHandler);
 };
 
 #endif // _WX_PRIVATE_FDIOHANDLER_H_
diff --git a/include/wx/private/fdiomanager.h b/include/wx/private/fdiomanager.h
new file mode 100644 (file)
index 0000000..764f4bd
--- /dev/null
@@ -0,0 +1,43 @@
+///////////////////////////////////////////////////////////////////////////////
+// Name:        wx/private/fdiomanager.h
+// Purpose:     declaration of wxFDIOManager
+// Author:      Vadim Zeitlin
+// Created:     2009-08-17
+// RCS-ID:      $Id: wxhead.h,v 1.11 2009-06-29 10:23:04 zeitlin Exp $
+// Copyright:   (c) 2009 Vadim Zeitlin <vadim@wxwidgets.org>
+// Licence:     wxWindows licence
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _WX_PRIVATE_FDIOMANAGER_H_
+#define _WX_PRIVATE_FDIOMANAGER_H_
+
+#include "wx/private/fdiohandler.h"
+
+// ----------------------------------------------------------------------------
+// wxFDIOManager: register or unregister wxFDIOHandlers
+// ----------------------------------------------------------------------------
+
+// currently only used in wxGTK and wxMotif, see wx/unix/apptrait.h
+
+class wxFDIOManager
+{
+public:
+    // identifies either input or output direction
+    //
+    // NB: the values of this enum shouldn't change
+    enum Direction
+    {
+        INPUT,
+        OUTPUT
+    };
+
+    // start or stop monitoring the events on the given file descriptor
+    virtual int AddInput(wxFDIOHandler *handler, int fd, Direction d) = 0;
+    virtual void RemoveInput(wxFDIOHandler *handler, int fd, Direction d) = 0;
+
+    // empty but virtual dtor for the base class
+    virtual ~wxFDIOManager() { }
+};
+
+#endif // _WX_PRIVATE_FDIOMANAGER_H_
+
index 4ec132c140f46e01f2cee64691073f283fc474e9..8bf6b4cb97efe82b83880420ab01a666581ad5c6 100644 (file)
@@ -14,6 +14,7 @@
 
 struct wxEndProcessData;
 struct wxExecuteData;
+class wxFDIOManager;
 
 // ----------------------------------------------------------------------------
 // wxAppTraits: the Unix version adds extra hooks needed by Unix code
@@ -42,6 +43,18 @@ public:
     // loop
     virtual int AddProcessCallback(wxEndProcessData *data, int fd);
 
+#if wxUSE_SOCKETS
+    // return a pointer to the object which should be used to integrate
+    // monitoring of the file descriptors to the event loop (currently this is
+    // used for the sockets only but should be used for arbitrary event loop
+    // sources in the future)
+    //
+    // this object may be different for the console and GUI applications
+    //
+    // the pointer is not deleted by the caller as normally it points to a
+    // static variable
+    virtual wxFDIOManager *GetFDIOManager();
+#endif // wxUSE_SOCKETS
 
 protected:
     // a helper for the implementation of WaitForChild() in wxGUIAppTraits:
index 59cb7595cca3e90bd5dcb39b8d21dc37333c4184..d0c5b47bcf8c297302b90050c3a497c80823867e 100644 (file)
@@ -36,7 +36,12 @@ public:
 // TODO: Should we use XtAddInput() for wxX11 too? Or, vice versa, if there is
 //       no advantage in doing this compared to the generic way currently used
 //       by wxX11, should we continue to use GTK/Motif-specific stuff?
-#if defined(__WXGTK__) || defined(__WXMOTIF__) || defined(__WXMAC__)
+#if defined(__WXGTK__) || defined(__WXMOTIF__)
+    #define wxHAS_GUI_FDIOMANAGER
+    #define wxHAS_GUI_PROCESS_CALLBACKS
+#endif // ports using wxFDIOManager
+
+#if defined(__WXMAC__)
     #define wxHAS_GUI_PROCESS_CALLBACKS
     #define wxHAS_GUI_SOCKET_MANAGER
 #endif
@@ -76,9 +81,17 @@ public:
     virtual bool ShowAssertDialog(const wxString& msg);
 #endif
 
-#if wxUSE_SOCKETS && defined(wxHAS_GUI_SOCKET_MANAGER)
+#if wxUSE_SOCKETS
+
+#ifdef wxHAS_GUI_SOCKET_MANAGER
     virtual wxSocketManager *GetSocketManager();
 #endif
+
+#ifdef wxHAS_GUI_FDIOMANAGER
+    virtual wxFDIOManager *GetFDIOManager();
+#endif
+
+#endif // wxUSE_SOCKETS
 };
 
 #endif // wxUSE_GUI
diff --git a/include/wx/unix/private/fdiounix.h b/include/wx/unix/private/fdiounix.h
new file mode 100644 (file)
index 0000000..fa86448
--- /dev/null
@@ -0,0 +1,28 @@
+///////////////////////////////////////////////////////////////////////////////
+// Name:        wx/unix/private/fdiounix.h
+// Purpose:     wxFDIOManagerUnix class used by console Unix applications
+// Author:      Vadim Zeitlin
+// Created:     2009-08-17
+// RCS-ID:      $Id: wxhead.h,v 1.11 2009-06-29 10:23:04 zeitlin Exp $
+// Copyright:   (c) 2009 Vadim Zeitlin <vadim@wxwidgets.org>
+// Licence:     wxWindows licence
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _UNIX_PRIVATE_FDIOUNIX_H_
+#define _UNIX_PRIVATE_FDIOUNIX_H_
+
+#include "wx/private/fdiomanager.h"
+
+// ----------------------------------------------------------------------------
+// wxFDIOManagerUnix: implement wxFDIOManager interface using wxFDIODispatcher
+// ----------------------------------------------------------------------------
+
+class wxFDIOManagerUnix : public wxFDIOManager
+{
+public:
+    virtual int AddInput(wxFDIOHandler *handler, int fd, Direction d);
+    virtual void RemoveInput(wxFDIOHandler *handler, int fd, Direction d);
+};
+
+#endif // _UNIX_PRIVATE_FDIOUNIX_H_
+
index 4b8f80afe366289b98c9cc0d725b5bd97e9558eb..63fc0d885dd372db74a8798124fe8a42e78603f5 100644 (file)
@@ -14,7 +14,7 @@
 
 #include <unistd.h>
 #include <sys/ioctl.h>
-#include "wx/private/fdiodispatcher.h"
+#include "wx/private/fdiomanager.h"
 
 class wxSocketImplUnix : public wxSocketImpl,
                          public wxFDIOHandler
@@ -25,8 +25,6 @@ public:
     {
         m_fds[0] =
         m_fds[1] = -1;
-
-        m_enabledCallbacks = 0;
     }
 
     virtual wxSocketError GetLastError() const;
@@ -54,14 +52,6 @@ public:
     virtual void OnExceptionWaiting();
     virtual bool IsOk() const { return m_fd != INVALID_SOCKET; }
 
-    // Unix-specific functions used by wxSocketFDIOManager only
-    bool HasAnyEnabledCallbacks() const { return m_enabledCallbacks != 0; }
-    void EnableCallback(wxFDIODispatcherEntryFlags flag)
-        { m_enabledCallbacks |= flag; }
-    void DisableCallback(wxFDIODispatcherEntryFlags flag)
-        { m_enabledCallbacks &= ~flag; }
-    int GetEnabledCallbacks() const { return m_enabledCallbacks; }
-
 private:
     virtual void DoClose()
     {
@@ -92,10 +82,6 @@ protected:
     // with the socket
     int m_fds[2];
 
-    // the events which are currently enabled for this socket, combination of
-    // wxFDIO_INPUT and wxFDIO_OUTPUT values
-    int m_enabledCallbacks;
-
 private:
     // notify the associated wxSocket about a change in socket state and shut
     // down the socket if the event is wxSOCKET_LOST
@@ -110,12 +96,18 @@ private:
     friend class wxSocketFDBasedManager;
 };
 
-// A version of wxSocketManager which uses FDs for socket IO
+// A version of wxSocketManager which uses FDs for socket IO: it is used by
+// Unix console applications and some X11-like ports (wxGTK and wxMotif but not
+// wxX11 currently) which implement their own port-specific wxFDIOManagers
 class wxSocketFDBasedManager : public wxSocketManager
 {
 public:
-    // no special initialization/cleanup needed when using FDs
-    virtual bool OnInit() { return true; }
+    wxSocketFDBasedManager()
+    {
+        m_fdioManager = NULL;
+    }
+
+    virtual bool OnInit();
     virtual void OnExit() { }
 
     virtual wxSocketImpl *CreateSocket(wxSocketBase& wxsocket)
@@ -123,95 +115,23 @@ public:
         return new wxSocketImplUnix(wxsocket);
     }
 
-protected:
-    // identifies either input or output direction
-    //
-    // NB: the values of this enum shouldn't change
-    enum SocketDir
-    {
-        FD_INPUT,
-        FD_OUTPUT
-    };
+    virtual void Install_Callback(wxSocketImpl *socket_, wxSocketNotify event);
+    virtual void Uninstall_Callback(wxSocketImpl *socket_, wxSocketNotify event);
 
+protected:
     // get the FD index corresponding to the given wxSocketNotify
-    SocketDir GetDirForEvent(wxSocketImpl *socket, wxSocketNotify event)
-    {
-        switch ( event )
-        {
-            default:
-                wxFAIL_MSG( "unknown socket event" );
-                return FD_INPUT; // we must return something
-
-            case wxSOCKET_LOST:
-                wxFAIL_MSG( "unexpected socket event" );
-                return FD_INPUT; // as above
-
-            case wxSOCKET_INPUT:
-                return FD_INPUT;
-
-            case wxSOCKET_OUTPUT:
-                return FD_OUTPUT;
-
-            case wxSOCKET_CONNECTION:
-                // for server sockets we're interested in events indicating
-                // that a new connection is pending, i.e. that accept() will
-                // succeed and this is indicated by socket becoming ready for
-                // reading, while for the other ones we're interested in the
-                // completion of non-blocking connect() which is indicated by
-                // the socket becoming ready for writing
-                return socket->IsServer() ? FD_INPUT : FD_OUTPUT;
-        }
-    }
+    wxFDIOManager::Direction
+    GetDirForEvent(wxSocketImpl *socket, wxSocketNotify event);
 
     // access the FDs we store
-    int& FD(wxSocketImplUnix *socket, SocketDir d)
+    int& FD(wxSocketImplUnix *socket, wxFDIOManager::Direction d)
     {
         return socket->m_fds[d];
     }
-};
-
-// Common base class for all ports using X11-like (and hence implemented in
-// X11, Motif and GTK) AddInput() and RemoveInput() functions
-class wxSocketInputBasedManager : public wxSocketFDBasedManager
-{
-public:
-    virtual void Install_Callback(wxSocketImpl *socket_, wxSocketNotify event)
-    {
-        wxSocketImplUnix * const
-            socket = static_cast<wxSocketImplUnix *>(socket_);
-
-        wxCHECK_RET( socket->m_fd != -1,
-                        "shouldn't be called on invalid socket" );
-
-        const SocketDir d = GetDirForEvent(socket, event);
-
-        int& fd = FD(socket, d);
-        if ( fd != -1 )
-            RemoveInput(fd);
-
-        fd = AddInput(socket, socket->m_fd, d);
-    }
-
-    virtual void Uninstall_Callback(wxSocketImpl *socket_, wxSocketNotify event)
-    {
-        wxSocketImplUnix * const
-            socket = static_cast<wxSocketImplUnix *>(socket_);
 
-        const SocketDir d = GetDirForEvent(socket, event);
+    wxFDIOManager *m_fdioManager;
 
-        int& fd = FD(socket, d);
-        if ( fd != -1 )
-        {
-            RemoveInput(fd);
-            fd = -1;
-        }
-    }
-
-private:
-    // these functions map directly to XtAdd/RemoveInput() or
-    // gdk_input_add/remove()
-    virtual int AddInput(wxSocketImplUnix *handler, int fd, SocketDir d) = 0;
-    virtual void RemoveInput(int fd) = 0;
+    wxDECLARE_NO_COPY_CLASS(wxSocketFDBasedManager);
 };
 
 #endif  /* _WX_UNIX_GSOCKUNX_H_ */
index 3b1504a3291ffe3be6ee68e58a63d8d335148db9..977b9fd02725e1b8d02e876966b10aef6ca7592c 100644 (file)
     #pragma hdrstop
 #endif
 
-#if wxUSE_SOCKETS && wxUSE_SELECT_DISPATCHER
+#if wxUSE_SOCKETS
 
+#include "wx/app.h"
 #include "wx/apptrait.h"
 #include "wx/private/socket.h"
 #include "wx/link.h"
 
 // ============================================================================
-// implementation
+// wxSocketFDBasedManager implementation
 // ============================================================================
 
-// ----------------------------------------------------------------------------
-// wxSocketFDIOManager: socket manager using wxFDIODispatcher
-// ----------------------------------------------------------------------------
-
-class wxSocketFDIOManager : public wxSocketFDBasedManager
-{
-public:
-    virtual void Install_Callback(wxSocketImpl *socket, wxSocketNotify event);
-    virtual void Uninstall_Callback(wxSocketImpl *socket, wxSocketNotify event);
-};
-
-void wxSocketFDIOManager::Install_Callback(wxSocketImpl *socket_,
-                                             wxSocketNotify event)
+bool wxSocketFDBasedManager::OnInit()
 {
-    wxSocketImplUnix * const socket = static_cast<wxSocketImplUnix *>(socket_);
+    wxAppTraits * const traits = wxApp::GetTraitsIfExists();
+    if ( !traits )
+        return false;
 
-    const int fd = socket->m_fd;
-
-    if ( fd == -1 )
-        return;
-
-    const SocketDir d = GetDirForEvent(socket, event);
+    m_fdioManager = traits->GetFDIOManager();
+    return m_fdioManager != NULL;
+}
 
-    wxFDIODispatcher * const dispatcher = wxFDIODispatcher::Get();
-    if ( !dispatcher )
-        return;
+void wxSocketFDBasedManager::Install_Callback(wxSocketImpl *socket_,
+                                              wxSocketNotify event)
+{
+    wxSocketImplUnix * const
+        socket = static_cast<wxSocketImplUnix *>(socket_);
 
-    FD(socket, d) = fd;
+    wxCHECK_RET( socket->m_fd != -1,
+                    "shouldn't be called on invalid socket" );
 
-    // register it when it's used for the first time, update it if it had been
-    // previously registered
-    const bool alreadyRegistered = socket->HasAnyEnabledCallbacks();
+    const wxFDIOManager::Direction d = GetDirForEvent(socket, event);
 
-    socket->EnableCallback(d == FD_INPUT ? wxFDIO_INPUT : wxFDIO_OUTPUT);
+    int& fd = FD(socket, d);
+    if ( fd != -1 )
+        m_fdioManager->RemoveInput(socket, fd, d);
 
-    if ( alreadyRegistered )
-        dispatcher->ModifyFD(fd, socket, socket->GetEnabledCallbacks());
-    else
-        dispatcher->RegisterFD(fd, socket, socket->GetEnabledCallbacks());
+    fd = m_fdioManager->AddInput(socket, socket->m_fd, d);
 }
 
-void wxSocketFDIOManager::Uninstall_Callback(wxSocketImpl *socket_,
-                                               wxSocketNotify event)
+void wxSocketFDBasedManager::Uninstall_Callback(wxSocketImpl *socket_,
+                                                wxSocketNotify event)
 {
-    wxSocketImplUnix * const socket = static_cast<wxSocketImplUnix *>(socket_);
-
-    const SocketDir d = GetDirForEvent(socket, event);
+    wxSocketImplUnix * const
+        socket = static_cast<wxSocketImplUnix *>(socket_);
 
-    const int fd = FD(socket, d);
-    if ( fd == -1 )
-        return;
+    const wxFDIOManager::Direction d = GetDirForEvent(socket, event);
 
-    FD(socket, d) = -1;
-
-    const wxFDIODispatcherEntryFlags
-        flag = d == FD_INPUT ? wxFDIO_INPUT : wxFDIO_OUTPUT;
-
-    wxFDIODispatcher * const dispatcher = wxFDIODispatcher::Get();
-    if ( !dispatcher )
-        return;
-
-    socket->DisableCallback(flag);
+    int& fd = FD(socket, d);
+    if ( fd != -1 )
+    {
+        m_fdioManager->RemoveInput(socket, fd, d);
+        fd = -1;
+    }
+}
 
-    if ( !socket->HasAnyEnabledCallbacks() )
-        dispatcher->UnregisterFD(fd);
-    else
-        dispatcher->ModifyFD(fd, socket, socket->GetEnabledCallbacks());
+wxFDIOManager::Direction
+wxSocketFDBasedManager::GetDirForEvent(wxSocketImpl *socket,
+                                       wxSocketNotify event)
+{
+    switch ( event )
+    {
+        default:
+            wxFAIL_MSG( "unknown socket event" );
+            return wxFDIOManager::INPUT; // we must return something
+
+        case wxSOCKET_LOST:
+            wxFAIL_MSG( "unexpected socket event" );
+            return wxFDIOManager::INPUT; // as above
+
+        case wxSOCKET_INPUT:
+            return wxFDIOManager::INPUT;
+
+        case wxSOCKET_OUTPUT:
+            return wxFDIOManager::OUTPUT;
+
+        case wxSOCKET_CONNECTION:
+            // for server sockets we're interested in events indicating
+            // that a new connection is pending, i.e. that accept() will
+            // succeed and this is indicated by socket becoming ready for
+            // reading, while for the other ones we're interested in the
+            // completion of non-blocking connect() which is indicated by
+            // the socket becoming ready for writing
+            return socket->IsServer() ? wxFDIOManager::INPUT
+                                      : wxFDIOManager::OUTPUT;
+    }
 }
 
 // set the wxBase variable to point to our wxSocketManager implementation
@@ -111,7 +119,7 @@ static struct ManagerSetter
 {
     ManagerSetter()
     {
-        static wxSocketFDIOManager s_manager;
+        static wxSocketFDBasedManager s_manager;
         wxAppTraits::SetDefaultSocketManager(&s_manager);
     }
 } gs_managerSetter;
index 7c0ed5c27d161e0e2a5fd8346ed0c647cf49af86..71d26ace50a4ee6f9102f44163b2a31a1d111b01 100644 (file)
@@ -5,6 +5,7 @@
 // Created:     1999
 // RCS-ID:      $Id$
 // Copyright:   (c) 1999, 2007 wxWidgets dev team
+//              (c) 2009 Vadim Zeitlin
 // Licence:     wxWindows licence
 ///////////////////////////////////////////////////////////////////////////////
 
 
 #if wxUSE_SOCKETS
 
-#include <stdlib.h>
-#include <stdio.h>
-
 #include <gdk/gdk.h>
 #include <glib.h>
 
-#include "wx/private/socket.h"
 #include "wx/apptrait.h"
+#include "wx/private/fdiomanager.h"
 
 extern "C" {
 static
@@ -28,7 +26,7 @@ void wxSocket_GDK_Input(gpointer data,
                         gint WXUNUSED(source),
                         GdkInputCondition condition)
 {
-    wxSocketImplUnix * const handler = static_cast<wxSocketImplUnix *>(data);
+    wxFDIOHandler * const handler = static_cast<wxFDIOHandler *>(data);
 
     if ( condition & GDK_INPUT_READ )
     {
@@ -46,29 +44,30 @@ void wxSocket_GDK_Input(gpointer data,
 }
 }
 
-class GTKSocketManager : public wxSocketInputBasedManager
+class GTKFDIOManager : public wxFDIOManager
 {
 public:
-    virtual int AddInput(wxSocketImplUnix *handler, int fd, SocketDir d)
+    virtual int AddInput(wxFDIOHandler *handler, int fd, Direction d)
     {
         return gdk_input_add
                (
                     fd,
-                    d == FD_OUTPUT ? GDK_INPUT_WRITE : GDK_INPUT_READ,
+                    d == OUTPUT ? GDK_INPUT_WRITE : GDK_INPUT_READ,
                     wxSocket_GDK_Input,
                     handler
                );
     }
 
-    virtual void RemoveInput(int fd)
+    virtual void
+    RemoveInput(wxFDIOHandler* WXUNUSED(handler), int fd, Direction WXUNUSED(d))
     {
         gdk_input_remove(fd);
     }
 };
 
-wxSocketManager *wxGUIAppTraits::GetSocketManager()
+wxFDIOManager *wxGUIAppTraits::GetFDIOManager()
 {
-    static GTKSocketManager s_manager;
+    static GTKFDIOManager s_manager;
     return &s_manager;
 }
 
index 7c0ed5c27d161e0e2a5fd8346ed0c647cf49af86..71d26ace50a4ee6f9102f44163b2a31a1d111b01 100644 (file)
@@ -5,6 +5,7 @@
 // Created:     1999
 // RCS-ID:      $Id$
 // Copyright:   (c) 1999, 2007 wxWidgets dev team
+//              (c) 2009 Vadim Zeitlin
 // Licence:     wxWindows licence
 ///////////////////////////////////////////////////////////////////////////////
 
 
 #if wxUSE_SOCKETS
 
-#include <stdlib.h>
-#include <stdio.h>
-
 #include <gdk/gdk.h>
 #include <glib.h>
 
-#include "wx/private/socket.h"
 #include "wx/apptrait.h"
+#include "wx/private/fdiomanager.h"
 
 extern "C" {
 static
@@ -28,7 +26,7 @@ void wxSocket_GDK_Input(gpointer data,
                         gint WXUNUSED(source),
                         GdkInputCondition condition)
 {
-    wxSocketImplUnix * const handler = static_cast<wxSocketImplUnix *>(data);
+    wxFDIOHandler * const handler = static_cast<wxFDIOHandler *>(data);
 
     if ( condition & GDK_INPUT_READ )
     {
@@ -46,29 +44,30 @@ void wxSocket_GDK_Input(gpointer data,
 }
 }
 
-class GTKSocketManager : public wxSocketInputBasedManager
+class GTKFDIOManager : public wxFDIOManager
 {
 public:
-    virtual int AddInput(wxSocketImplUnix *handler, int fd, SocketDir d)
+    virtual int AddInput(wxFDIOHandler *handler, int fd, Direction d)
     {
         return gdk_input_add
                (
                     fd,
-                    d == FD_OUTPUT ? GDK_INPUT_WRITE : GDK_INPUT_READ,
+                    d == OUTPUT ? GDK_INPUT_WRITE : GDK_INPUT_READ,
                     wxSocket_GDK_Input,
                     handler
                );
     }
 
-    virtual void RemoveInput(int fd)
+    virtual void
+    RemoveInput(wxFDIOHandler* WXUNUSED(handler), int fd, Direction WXUNUSED(d))
     {
         gdk_input_remove(fd);
     }
 };
 
-wxSocketManager *wxGUIAppTraits::GetSocketManager()
+wxFDIOManager *wxGUIAppTraits::GetFDIOManager()
 {
-    static GTKSocketManager s_manager;
+    static GTKFDIOManager s_manager;
     return &s_manager;
 }
 
index 6e347bfe60ee4cc154c7dfd66b03602feb1c8e66..7b5802743b995f2281761955e245f69a1cb0a238 100644 (file)
@@ -15,7 +15,7 @@
 
 #include <X11/Intrinsic.h>      // XtAppAdd/RemoveInput()
 #include "wx/motif/private.h"   // wxGetAppContext()
-#include "wx/private/socket.h"
+#include "wx/private/fdiomanager.h"
 #include "wx/apptrait.h"
 
 extern "C" {
@@ -23,7 +23,7 @@ extern "C" {
 static void wxSocket_Motif_Input(XtPointer data, int *WXUNUSED(fid),
                                  XtInputId *WXUNUSED(id))
 {
-    wxSocketImplUnix * const handler = static_cast<wxSocketImplUnix *>(data);
+    wxFDIOHandler * const handler = static_cast<wxFDIOHandler *>(data);
 
     handler->OnReadWaiting();
 }
@@ -31,39 +31,40 @@ static void wxSocket_Motif_Input(XtPointer data, int *WXUNUSED(fid),
 static void wxSocket_Motif_Output(XtPointer data, int *WXUNUSED(fid),
                                   XtInputId *WXUNUSED(id))
 {
-    wxSocketImplUnix * const handler = static_cast<wxSocketImplUnix *>(data);
+    wxFDIOHandler * const handler = static_cast<wxFDIOHandler *>(data);
 
     handler->OnWriteWaiting();
 }
 
 }
 
-class MotifSocketManager : public wxSocketInputBasedManager
+class MotifFDIOManager : public wxFDIOManager
 {
 public:
-    virtual int AddInput(wxSocketImplUnix *handler, int fd, SocketDir d)
+    virtual int AddInput(wxFDIOHandler *handler, int fd, Direction d)
     {
         return XtAppAddInput
                (
                     wxGetAppContext(),
                     fd,
-                    (XtPointer)(d == FD_OUTPUT ? XtInputWriteMask
-                                               : XtInputReadMask),
-                    d == FD_OUTPUT ? wxSocket_Motif_Output
-                                   : wxSocket_Motif_Input,
+                    (XtPointer)(d == OUTPUT ? XtInputWriteMask
+                                            : XtInputReadMask),
+                    d == OUTPUT ? wxSocket_Motif_Output
+                                : wxSocket_Motif_Input,
                     handler
                );
     }
 
-    virtual void RemoveInput(int fd)
+    virtual void
+    RemoveInput(wxFDIOHandler* WXUNUSED(handler), int fd, Direction WXUNUSED(d))
     {
         XtRemoveInput(fd);
     }
 };
 
-wxSocketManager *wxGUIAppTraits::GetSocketManager()
+wxFDIOManager *wxGUIAppTraits::GetFDIOManager()
 {
-    static MotifSocketManager s_manager;
+    static MotifFDIOManager s_manager;
     return &s_manager;
 }
 
index 2c7d7a209aff00912d5297c40b16c413f791c719..8aa2c2f0080cf210074c6d8a06dc72420704dabf 100644 (file)
 
 static void wxSocket_PM_Input(void *data)
 {
-    wxSocketImplUnix *handler = static_cast<wxSocketImplUnix *>(data);
+    wxFDIOHandler *handler = static_cast<wxSocketImplUnix *>(data);
 
     handler->OnReadWaiting();
 }
 
 static void wxSocket_PM_Output(void *data)
 {
-    wxSocketImplUnix *handler = static_cast<wxSocketImplUnix *>(data);
+    wxFDIOHandler *handler = static_cast<wxSocketImplUnix *>(data);
 
     handler->OnWriteWaiting();
 }
 
-class PMSocketManager : public wxSocketInputBasedManager
+class PMFDIOManager : public wxFDIOManager
 {
 public:
-    virtual int AddInput(wxSocketImplUnix *handler, int fd, SocketDir d)
+    virtual int AddInput(wxFDIOHandler *handler,
+                         int fd,
+                         wxFDIOManager::Direction d)
     {
       if (d == FD_OUTPUT)
           return wxTheApp->AddSocketHandler(fd, wxSockWriteMask,
@@ -48,15 +50,18 @@ public:
                                             wxSocket_PM_Input, handler);
     }
 
-    virtual void RemoveInput(int fd)
+    virtual void
+    RemoveInput(wxFDIOHandler * WXUNUSED(handler),
+                int fd,
+                wxFDIOManager::Direction WXUNUSED(dir))
     {
         wxTheApp->RemoveSocketHandler(fd);
     }
 };
 
-wxSocketManager *wxGUIAppTraits::GetSocketManager()
+wxFDIOManager *wxGUIAppTraits::GetFDIOManager()
 {
-    static PMSocketManager s_manager;
+    static PMFDIOManager s_manager;
     return &s_manager;
 }
 
diff --git a/src/unix/fdiounix.cpp b/src/unix/fdiounix.cpp
new file mode 100644 (file)
index 0000000..746d8ed
--- /dev/null
@@ -0,0 +1,100 @@
+///////////////////////////////////////////////////////////////////////////////
+// Name:        src/unix/fdiounix.cpp
+// Purpose:     wxFDIOManager implementation for console Unix applications
+// Author:      Vadim Zeitlin
+// Created:     2009-08-17
+// RCS-ID:      $Id: wxhead.cpp,v 1.10 2009-06-29 10:23:04 zeitlin Exp $
+// Copyright:   (c) 2009 Vadim Zeitlin <vadim@wxwidgets.org>
+// Licence:     wxWindows licence
+///////////////////////////////////////////////////////////////////////////////
+
+// ============================================================================
+// declarations
+// ============================================================================
+
+// ----------------------------------------------------------------------------
+// headers
+// ----------------------------------------------------------------------------
+
+// for compilers that support precompilation, includes "wx.h".
+#include "wx/wxprec.h"
+
+#ifdef __BORLANDC__
+    #pragma hdrstop
+#endif
+
+#include "wx/apptrait.h"
+#include "wx/private/fdiodispatcher.h"
+#include "wx/unix/private/fdiounix.h"
+
+// ============================================================================
+// wxFDIOManagerUnix implementation
+// ============================================================================
+
+int wxFDIOManagerUnix::AddInput(wxFDIOHandler *handler, int fd, Direction d)
+{
+    wxFDIODispatcher * const dispatcher = wxFDIODispatcher::Get();
+    wxCHECK_MSG( dispatcher, -1, "can't monitor FDs without FD IO dispatcher" );
+
+    // translate our direction to dispatcher flags
+    const int flag = d == INPUT ? wxFDIO_INPUT : wxFDIO_OUTPUT;
+
+    // we need to either register this FD with the dispatcher or update an
+    // existing registration depending on whether it had been previously
+    // registered for anything or not
+    bool ok;
+    const int regmask = handler->GetRegisteredEvents();
+    if ( !regmask )
+    {
+        ok = dispatcher->RegisterFD(fd, handler, flag);
+    }
+    else
+    {
+        ok = dispatcher->ModifyFD(fd, handler, regmask | flag);
+    }
+
+    if ( !ok )
+        return -1;
+
+    // update the stored mask of registered events
+    handler->SetRegisteredEvent(flag);
+
+    return fd;
+}
+
+void wxFDIOManagerUnix::RemoveInput(wxFDIOHandler *handler, int fd, Direction d)
+{
+    wxFDIODispatcher * const dispatcher = wxFDIODispatcher::Get();
+    if ( !dispatcher )
+        return;
+
+    const int flag = d == INPUT ? wxFDIO_INPUT : wxFDIO_OUTPUT;
+
+    // just as in AddInput() above we may need to either just modify the FD or
+    // remove it completely if we don't need to monitor it any more
+    bool ok;
+    const int regmask = handler->GetRegisteredEvents();
+    if ( regmask == flag )
+    {
+        ok = dispatcher->UnregisterFD(fd);
+    }
+    else
+    {
+        ok = dispatcher->ModifyFD(fd, handler, regmask & ~flag);
+    }
+
+    if ( !ok )
+    {
+        wxLogDebug("Failed to unregister %d in direction %d", fd, d);
+    }
+
+    // do this even after a failure to unregister it, we still tried...
+    handler->ClearRegisteredEvent(flag);
+}
+
+wxFDIOManager *wxAppTraits::GetFDIOManager()
+{
+    static wxFDIOManagerUnix s_manager;
+    return &s_manager;
+}
+