Exemple #1
0
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
}
Exemple #2
0
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
}
Exemple #3
0
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
}
Exemple #4
0
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
}
Exemple #5
0
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;
}
Exemple #6
0
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;
}
Exemple #7
0
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;
}
Exemple #8
0
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
}