}
cl->next = dyingclients;
dyingclients = cl;
- if (cl->FD != INVALID_SOCKET) {
- net_poll_del(cl->FD);
- net_poll_add(cl->FD, SOCKTYPE_DYING, cl);
- }
+ if (cl->FD != INVALID_SOCKET)
+ net_poll_change_type(cl->FD, SOCKTYPE_DYING);
update_poll_reg(cl);
/* Part all channels */
for (auto chan : cl->channels.pop_view())
}
net_poll_reg_impl(i, ev);
}
+void net_poll_change_type(SOCKET fd, int type)
+{
+ if (fd == INVALID_SOCKET) {
+ fprintf(stderr, "net_poll_change_type: INVALID_SOCKET\n");
+ abort();
+ }
+ int i = search(fd);
+ if (!IS_FOUND(i, fd)) {
+ fprintf(stderr, "net_poll_change_type: socket not added\n");
+ abort();
+ }
+ fds[i].type = type;
+}
void net_poll_add(SOCKET fd, int type, void *assoc);
void net_poll_del(SOCKET fd);
void net_poll_reg(SOCKET fd, int ev);
+void net_poll_change_type(SOCKET fd, int type);
int net_poll_begin(void);
int net_poll_get(struct net_pollfd *out);
#define NETPOLL_IN 1