int aio_socket_accept(aio_socket_t socket, aio_onaccept proc, void* param) { struct epoll_context* ctx = (struct epoll_context*)socket; assert(0 == (ctx->ev.events & EPOLLIN)); if(ctx->ev.events & EPOLLIN) return EBUSY; ctx->in.accept.proc = proc; ctx->in.accept.param = param; // r = epoll_accept(ctx, 0, 0); // if(EAGAIN != r) return r; // man 2 accept to see more EPollIn(ctx, epoll_accept); return errno; // epoll_ctl return -1 }
int aio_socket_recvfrom_v(aio_socket_t socket, socket_bufvec_t* vec, int n, aio_onrecvfrom proc, void* param) { struct epoll_context* ctx = (struct epoll_context*)socket; assert(0 == (ctx->ev.events & EPOLLIN)); if(ctx->ev.events & EPOLLIN) return EBUSY; ctx->in.recvfrom_v.proc = proc; ctx->in.recvfrom_v.param = param; ctx->in.recvfrom_v.vec = vec; ctx->in.recvfrom_v.n = n; // r = epoll_recvfrom_v(ctx, 0, 0); // if(EAGAIN != r) return r; EPollIn(ctx, epoll_recvfrom_v); return errno; // epoll_ctl return -1 }
int aio_socket_recvfrom(aio_socket_t socket, void* buffer, size_t bytes, aio_onrecvfrom proc, void* param) { struct epoll_context* ctx = (struct epoll_context*)socket; assert(0 == (ctx->ev.events & EPOLLIN)); if(ctx->ev.events & EPOLLIN) return EBUSY; ctx->in.recvfrom.proc = proc; ctx->in.recvfrom.param = param; ctx->in.recvfrom.buffer = buffer; ctx->in.recvfrom.bytes = bytes; // r = epoll_recvfrom(ctx, 0, 0); // if(EAGAIN != r) return r; EPollIn(ctx, epoll_recvfrom); return errno; // epoll_ctl return -1 }
int aio_socket_recv(aio_socket_t socket, void* buffer, size_t bytes, aio_onrecv proc, void* param) { struct epoll_context* ctx = (struct epoll_context*)socket; assert(0 == (ctx->ev.events & EPOLLIN)); if(ctx->ev.events & EPOLLIN) return EBUSY; ctx->in.recv.proc = proc; ctx->in.recv.param = param; ctx->in.recv.buffer = buffer; ctx->in.recv.bytes = bytes; // if(EAGAIN == epoll_recv(ctx, 0, 0)) { EPollIn(ctx, epoll_recv); } return errno; }