]> git.saurik.com Git - wxWidgets.git/blobdiff - src/unix/sockunix.cpp
Fix typo in last commit
[wxWidgets.git] / src / unix / sockunix.cpp
index c50debc3266e2c9971769d6effe5b89378137898..0bcaa363b9255e51ee2c07b93b808a1228142b05 100644 (file)
 // wxSocketImpl implementation
 // ============================================================================
 
-/* static */
-wxSocketImpl *wxSocketImpl::Create(wxSocketBase& wxsocket)
-{
-    return new wxSocketImplUnix(wxsocket);
-}
-
-
 wxSocketError wxSocketImplUnix::GetLastError() const
 {
     switch ( errno )
@@ -107,6 +100,9 @@ wxSocketError wxSocketImplUnix::GetLastError() const
 void wxSocketImplUnix::DoEnableEvents(int flags, bool enable)
 {
     wxSocketManager * const manager = wxSocketManager::Get();
+    if (!manager)
+        return;
+
     if ( enable )
     {
         if ( flags & wxSOCKET_INPUT_FLAG )
@@ -234,7 +230,15 @@ void wxSocketImplUnix::OnWriteWaiting()
 
 void wxSocketImplUnix::OnExceptionWaiting()
 {
-    wxFAIL_MSG( "not supposed to be called" );
+    // when using epoll() this is called when an error occurred on the socket
+    // so close it if it hadn't been done yet -- what else can we do?
+    //
+    // notice that we shouldn't be called at all when using select() as we
+    // don't use wxFDIO_EXCEPTION when registering the socket for monitoring
+    // and this is good because select() would call this for any OOB data which
+    // is not necessarily an error
+    if ( m_fd != INVALID_SOCKET )
+        OnStateChange(wxSOCKET_LOST);
 }
 
 #endif  /* wxUSE_SOCKETS */