diff options
Diffstat (limited to 'ace/Select_Reactor_T.cpp')
-rw-r--r-- | ace/Select_Reactor_T.cpp | 19 |
1 files changed, 13 insertions, 6 deletions
diff --git a/ace/Select_Reactor_T.cpp b/ace/Select_Reactor_T.cpp index a643a325cbc..02f7bfbea79 100644 --- a/ace/Select_Reactor_T.cpp +++ b/ace/Select_Reactor_T.cpp @@ -739,11 +739,16 @@ ACE_Select_Reactor_T<ACE_SELECT_REACTOR_TOKEN>::handle_error (void) else return this->check_handles (); #else +# if defined (ACE_PSOS) + else if (errno == EBADS) + return this->check_handles (); +# else else if (errno == EBADF) return this->check_handles (); +# endif /* ACE_PSOS */ else return -1; -#endif /* __MVS__ */ +#endif /* __MVS__ || ACE_WIN32 */ } template <class ACE_SELECT_REACTOR_TOKEN> void @@ -1254,10 +1259,10 @@ ACE_Select_Reactor_T<ACE_SELECT_REACTOR_TOKEN>::check_handles (void) { ACE_TRACE ("ACE_Select_Reactor_T::check_handles"); -#if defined (ACE_WIN32) || defined (__MVS__) +#if defined (ACE_WIN32) || defined (__MVS__) || defined (ACE_PSOS) ACE_Time_Value time_poll = ACE_Time_Value::zero; ACE_Handle_Set rd_mask; -#endif /* ACE_WIN32 || MVS */ +#endif /* ACE_WIN32 || MVS || ACE_PSOS */ ACE_Event_Handler *eh = 0; int result = 0; @@ -1273,11 +1278,13 @@ ACE_Select_Reactor_T<ACE_SELECT_REACTOR_TOKEN>::check_handles (void) if (handle == ACE_INVALID_HANDLE) continue; -#if defined (ACE_WIN32) || defined (__MVS__) +#if defined (ACE_WIN32) || defined (__MVS__) || defined (ACE_PSOS) // Win32 needs to do the check this way because fstat won't work on // a socket handle. MVS Open Edition needs to do it this way because, // even though the docs say to check a handle with either select or // fstat, the fstat method always says the handle is ok. + // pSOS needs to do it this way because file handles and socket handles + // are maintained by separate pieces of the system. rd_mask.set_bit (handle); if (ACE_OS::select (int (handle) + 1, @@ -1289,7 +1296,7 @@ ACE_Select_Reactor_T<ACE_SELECT_REACTOR_TOKEN>::check_handles (void) ACE_Event_Handler::ALL_EVENTS_MASK); } rd_mask.clr_bit (handle); -#else /* !ACE_WIN32 && !MVS */ +#else /* !ACE_WIN32 && !MVS && !ACE_PSOS */ struct stat temp; if (ACE_OS::fstat (handle, &temp) == -1) @@ -1298,7 +1305,7 @@ ACE_Select_Reactor_T<ACE_SELECT_REACTOR_TOKEN>::check_handles (void) this->remove_handler_i (handle, ACE_Event_Handler::ALL_EVENTS_MASK); } -#endif /* ACE_WIN32 || MVS */ +#endif /* ACE_WIN32 || MVS || ACE_PSOS */ } return result; |