}
void sk_close(Socket s) {
+ extern char *do_select(SOCKET skt, int startup);
+
del234(sktree, s);
do_select(s->s, 0);
closesocket(s->s);
return 1; /* boggle */
if ((err = WSAGETSELECTERROR(lParam)) != 0) {
- fatalbox(winsock_error_string(err));
+ /*
+ * An error has occurred on this socket. Pass it to the
+ * receiver function.
+ */
+ return s->receiver(s, 3, winsock_error_string(err), err);
}
noise_ultralight(lParam);
}
}
if (ret < 0) {
- fatalbox(winsock_error_string(err));
+ return s->receiver(s, 3, winsock_error_string(err), err);
} else {
int type = s->in_oob ? 2 : 0;
s->in_oob = FALSE;