- int c;
- int *m_id;
-
- m_id = (int *)(socket->m_gui_dependent);
-
- switch (event) {
- case GSOCK_CONNECTION:
- case GSOCK_LOST:
- case GSOCK_INPUT: c = 0; break;
- case GSOCK_OUTPUT: c = 1; break;
- break;
- default: return;
- }
-
- if (m_id[c] != -1)
- XtRemoveInput(m_id[c]);
+ int *m_id = (int *)(socket->m_gui_dependent);
+ int c;
+
+ if (socket->m_fd == -1)
+ return;
+
+ switch (event)
+ {
+ case GSOCK_LOST: /* fall-through */
+ case GSOCK_INPUT: c = 0; break;
+ case GSOCK_OUTPUT: c = 1; break;
+ case GSOCK_CONNECTION: c = ((socket->m_server) ? 0 : 1); break;
+ default: return;
+ }
+
+ if (m_id[c] != -1)
+ XtRemoveInput(m_id[c]);
+
+ if (c == 0)
+ {
+ m_id[0] = XtAppAddInput(wxGetAppContext(), socket->m_fd,
+ (XtPointer *)XtInputReadMask,
+ (XtInputCallbackProc) _GSocket_Motif_Input,
+ (XtPointer) socket);
+ }
+ else
+ {
+ m_id[1] = XtAppAddInput(wxGetAppContext(), socket->m_fd,
+ (XtPointer *)XtInputWriteMask,
+ (XtInputCallbackProc) _GSocket_Motif_Output,
+ (XtPointer) socket);
+ }
+}