gint WXUNUSED(source),
GdkInputCondition condition)
{
- wxSocketImpl * const socket = static_cast<wxSocketImpl *>(data);
+ wxSocketImplUnix * const handler = static_cast<wxSocketImplUnix *>(data);
if ( condition & GDK_INPUT_READ )
- socket->Detected_Read();
+ {
+ handler->OnReadWaiting();
+
+ // we could have lost connection while reading in which case we
+ // shouldn't call OnWriteWaiting() as the socket is now closed and it
+ // would assert
+ if ( handler->m_fd == INVALID_SOCKET )
+ return;
+ }
+
if ( condition & GDK_INPUT_WRITE )
- socket->Detected_Write();
+ handler->OnWriteWaiting();
}
}
class GTKSocketManager : public wxSocketInputBasedManager
{
public:
- virtual int AddInput(wxSocketImpl *socket, SocketDir d)
+ virtual int AddInput(wxSocketImplUnix *handler, int fd, SocketDir d)
{
return gdk_input_add
(
- socket->m_fd,
+ fd,
d == FD_OUTPUT ? GDK_INPUT_WRITE : GDK_INPUT_READ,
wxSocket_GDK_Input,
- socket
+ handler
);
}