int aio_socket_send_v(aio_socket_t socket, socket_bufvec_t* vec, int n, aio_onsend proc, void* param) { struct epoll_context* ctx = (struct epoll_context*)socket; assert(0 == (ctx->ev.events & EPOLLOUT)); if(ctx->ev.events & EPOLLOUT) return EBUSY; ctx->out.send_v.proc = proc; ctx->out.send_v.param = param; ctx->out.send_v.vec = vec; ctx->out.send_v.n = n; // r = epoll_send_v(ctx, 0, 0); // if(EAGAIN != r) return r; EPollOut(ctx, epoll_send_v); return errno; // epoll_ctl return -1 }
int aio_socket_send(aio_socket_t socket, const void* buffer, size_t bytes, aio_onsend proc, void* param) { struct epoll_context* ctx = (struct epoll_context*)socket; assert(0 == (ctx->ev.events & EPOLLOUT)); if(ctx->ev.events & EPOLLOUT) return EBUSY; ctx->out.send.proc = proc; ctx->out.send.param = param; ctx->out.send.buffer = buffer; ctx->out.send.bytes = bytes; // r = epoll_send(ctx, 0, 0); // if(EAGAIN != r) return r; EPollOut(ctx, epoll_send); return errno; // epoll_ctl return -1 }
int aio_socket_sendto_v(aio_socket_t socket, const struct sockaddr *addr, socklen_t addrlen, socket_bufvec_t* vec, int n, aio_onsend proc, void* param) { struct epoll_context* ctx = (struct epoll_context*)socket; assert(0 == (ctx->ev.events & EPOLLOUT)); if(ctx->ev.events & EPOLLOUT) return EBUSY; ctx->out.send_v.addrlen = addrlen > sizeof(ctx->out.send_v.addr) ? sizeof(ctx->out.send_v.addr) : addrlen; memcpy(&ctx->out.send_v.addr, addr, ctx->out.send_v.addrlen); ctx->out.send_v.proc = proc; ctx->out.send_v.param = param; ctx->out.send_v.vec = vec; ctx->out.send_v.n = n; // r = epoll_sendto_v(ctx, 0, 0); // if(EAGAIN != r) return r; EPollOut(ctx, epoll_sendto_v); return errno; // epoll_ctl return -1 }
int aio_socket_sendto(aio_socket_t socket, const struct sockaddr *addr, socklen_t addrlen, const void* buffer, size_t bytes, aio_onsend proc, void* param) { struct epoll_context* ctx = (struct epoll_context*)socket; assert(0 == (ctx->ev.events & EPOLLOUT)); if(ctx->ev.events & EPOLLOUT) return EBUSY; ctx->out.send.addrlen = addrlen > sizeof(ctx->out.send.addr) ? sizeof(ctx->out.send.addr) : addrlen; memcpy(&ctx->out.send.addr, addr, ctx->out.send.addrlen); ctx->out.send.proc = proc; ctx->out.send.param = param; ctx->out.send.buffer = buffer; ctx->out.send.bytes = bytes; // r = epoll_sendto(ctx, 0, 0); // if(EAGAIN != r) return r; EPollOut(ctx, epoll_sendto); return errno; // epoll_ctl return -1 }
int aio_socket_connect(aio_socket_t socket, const char* ip, int port, aio_onconnect proc, void* param) { struct epoll_context* ctx = (struct epoll_context*)socket; assert(0 == (ctx->ev.events & EPOLLOUT)); if(ctx->ev.events & EPOLLOUT) return EBUSY; ctx->out.connect.addr.sin_family = AF_INET; ctx->out.connect.addr.sin_port = htons(port); ctx->out.connect.addr.sin_addr.s_addr = inet_addr(ip); ctx->out.connect.proc = proc; ctx->out.connect.param = param; // if(EINPROGRESS == epoll_connect(ctx, 0, 0)) { // man 2 connect to see more(ERRORS: EINPROGRESS) EPollOut(ctx, epoll_connect); } return errno; }
int aio_socket_sendto_v(aio_socket_t socket, const char* ip, int port, socket_bufvec_t* vec, int n, aio_onsend proc, void* param) { struct epoll_context* ctx = (struct epoll_context*)socket; assert(0 == (ctx->ev.events & EPOLLOUT)); if(ctx->ev.events & EPOLLOUT) return EBUSY; ctx->out.send_v.addr.sin_family = AF_INET; ctx->out.send_v.addr.sin_port = htons(port); ctx->out.send_v.addr.sin_addr.s_addr = inet_addr(ip); ctx->out.send_v.proc = proc; ctx->out.send_v.param = param; ctx->out.send_v.vec = vec; ctx->out.send_v.n = n; // if(EAGAIN == epoll_sendto_v(ctx, 0, 0)) { EPollOut(ctx, epoll_sendto_v); } return errno; }
int aio_socket_sendto(aio_socket_t socket, const char* ip, int port, const void* buffer, size_t bytes, aio_onsend proc, void* param) { struct epoll_context* ctx = (struct epoll_context*)socket; assert(0 == (ctx->ev.events & EPOLLOUT)); if(ctx->ev.events & EPOLLOUT) return EBUSY; ctx->out.send.addr.sin_family = AF_INET; ctx->out.send.addr.sin_port = htons(port); ctx->out.send.addr.sin_addr.s_addr = inet_addr(ip); ctx->out.send.proc = proc; ctx->out.send.param = param; ctx->out.send.buffer = buffer; ctx->out.send.bytes = bytes; // if(EAGAIN == epoll_sendto(ctx, 0, 0)) { EPollOut(ctx, epoll_sendto); } return errno; }
int aio_socket_connect(aio_socket_t socket, const struct sockaddr *addr, socklen_t addrlen, aio_onconnect proc, void* param) { int r; struct epoll_context* ctx = (struct epoll_context*)socket; assert(0 == (ctx->ev.events & EPOLLOUT)); if(ctx->ev.events & EPOLLOUT) return EBUSY; ctx->out.connect.addrlen = addrlen > sizeof(ctx->out.connect.addr) ? sizeof(ctx->out.connect.addr) : addrlen; memcpy(&ctx->out.connect.addr, addr, ctx->out.connect.addrlen); ctx->out.connect.proc = proc; ctx->out.connect.param = param; // r = epoll_connect(ctx, 0, 0); // if(EINPROGRESS != r) return r; r = connect(ctx->socket, (const struct sockaddr*)&ctx->out.connect.addr, ctx->out.connect.addrlen); if(0 == r || EINPROGRESS == errno) { EPollOut(ctx, epoll_connect); } return errno; // epoll_ctl return -1 }