mirror of
https://github.com/cloudwu/skynet.git
synced 2026-07-24 20:23:06 +00:00
bugfix: kqueue api
This commit is contained in:
@@ -211,6 +211,7 @@ harbor_create(void) {
|
|||||||
h->remote_addr[i] = NULL;
|
h->remote_addr[i] = NULL;
|
||||||
}
|
}
|
||||||
h->map = _hash_new();
|
h->map = _hash_new();
|
||||||
|
h->starting_msg = NULL;
|
||||||
return h;
|
return h;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -25,6 +25,15 @@ sp_release(int kfd) {
|
|||||||
close(kfd);
|
close(kfd);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
sp_del(int kfd, int sock) {
|
||||||
|
struct kevent ke;
|
||||||
|
EV_SET(&ke, sock, EVFILT_READ, EV_DELETE, 0, 0, NULL);
|
||||||
|
kevent(kfd, &ke, 1, NULL, 0, NULL);
|
||||||
|
EV_SET(&ke, sock, EVFILT_WRITE, EV_DELETE, 0, 0, NULL);
|
||||||
|
kevent(kfd, &ke, 1, NULL, 0, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
sp_add(int kfd, int sock, void *ud) {
|
sp_add(int kfd, int sock, void *ud) {
|
||||||
struct kevent ke;
|
struct kevent ke;
|
||||||
@@ -32,21 +41,27 @@ sp_add(int kfd, int sock, void *ud) {
|
|||||||
if (kevent(kfd, &ke, 1, NULL, 0, NULL) == -1) {
|
if (kevent(kfd, &ke, 1, NULL, 0, NULL) == -1) {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
EV_SET(&ke, sock, EVFILT_WRITE, EV_ADD, 0, 0, ud);
|
||||||
|
if (kevent(kfd, &ke, 1, NULL, 0, NULL) == -1) {
|
||||||
|
EV_SET(&ke, sock, EVFILT_READ, EV_DELETE, 0, 0, NULL);
|
||||||
|
kevent(kfd, &ke, 1, NULL, 0, NULL);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
EV_SET(&ke, sock, EVFILT_WRITE, EV_DISABLE, 0, 0, ud);
|
||||||
|
if (kevent(kfd, &ke, 1, NULL, 0, NULL) == -1) {
|
||||||
|
sp_del(kfd, sock);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
sp_del(int kfd, int sock) {
|
|
||||||
struct kevent ke;
|
|
||||||
EV_SET(&ke, sock, EVFILT_READ | EVFILT_WRITE, EV_DELETE, 0, 0, NULL);
|
|
||||||
kevent(kfd, &ke, 1, NULL, 0, NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
sp_write(int kfd, int sock, void *ud, bool enable) {
|
sp_write(int kfd, int sock, void *ud, bool enable) {
|
||||||
struct kevent ke;
|
struct kevent ke;
|
||||||
EV_SET(&ke, sock, EVFILT_WRITE, enable ? EV_ENABLE : EV_DISABLE, 0, 0, ud);
|
EV_SET(&ke, sock, EVFILT_WRITE, enable ? EV_ENABLE : EV_DISABLE, 0, 0, ud);
|
||||||
kevent(kfd, &ke, 1, NULL, 0, NULL);
|
if (kevent(kfd, &ke, 1, NULL, 0, NULL) == -1) {
|
||||||
|
// todo: check error
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
@@ -57,9 +72,9 @@ sp_wait(int kfd, struct event *e, int max) {
|
|||||||
int i;
|
int i;
|
||||||
for (i=0;i<n;i++) {
|
for (i=0;i<n;i++) {
|
||||||
e[i].s = ev[i].udata;
|
e[i].s = ev[i].udata;
|
||||||
unsigned flag = ev[i].filter;
|
unsigned filter = ev[i].filter;
|
||||||
e[i].write = (flag & EVFILT_WRITE) != 0;
|
e[i].write = (filter == EVFILT_WRITE);
|
||||||
e[i].read = (flag & EVFILT_READ) != 0;
|
e[i].read = (filter == EVFILT_READ);
|
||||||
}
|
}
|
||||||
|
|
||||||
return n;
|
return n;
|
||||||
|
|||||||
Reference in New Issue
Block a user