Esempio n. 1
0
ut_sock_t			ut_net_open_listener(const char* ip, int32_t port)
{
	int32_t nerr = 0;
	ut_sock_t listener = ut_sock_tcp();
	if(!ut_sock_isvalidate(listener)) return listener;
	UT_VERIFY_TRUE(ut_sock_reuseaddr(listener) == 0);
	nerr = ut_sock_bind(listener, ip, port);
	UT_CHECK_TRUE(nerr == 0);
	nerr = ut_sock_set_nonblock(listener);
	UT_CHECK_TRUE(nerr == 0);
	nerr = ut_sock_listen(listener, 128);
	UT_CHECK_TRUE(nerr == 0);

	return listener;

FAIL:
	ut_net_close_listener(listener);
	return ut_sock_invalid();
}
Esempio n. 2
0
void uninit_net_handle(struct net_t* net)
{
	UT_CHECK_TRUE (net != 0);
	/*释放epoll*/
	close(net->epoll_handle);
	net->epoll_handle = -1;
	/*释放epoll_event*/
	NET_DELETE(net->wait_event);
	net->wait_event = 0;

FAIL:
	return;
}
Esempio n. 3
0
void ut_channel_free(struct ut_channel_t* channel)
{
	UT_CHECK_TRUE(channel != 0);
	struct ut_net_t*	net = channel->net;
	UT_VERIFY_TRUE(net != 0);

	ut_channel_finalize(channel);
	ut_list_remove(&channel->queue_inuse);
	ut_list_push_tail(&net->queue_free, &channel->queue_inuse);

FAIL:
	return;
}
Esempio n. 4
0
struct ut_channel_t*	ut_net_deliver_socket(struct ut_net_t* net,
	ut_sock_t sock, recv_data rcvfunc, void* data)
{
	struct ut_channel_t* channel = 0;

	UT_VERIFY_TRUE(net != 0);
	UT_VERIFY_TRUE(rcvfunc != 0);
	
	UT_CHECK_TRUE(0 == ut_sock_set_keepalive(sock));
	UT_CHECK_TRUE(0 == ut_sock_set_nonblock(sock));

	// 申请通道资源
	channel = ut_channel_malloc(net);
	UT_CHECK_TRUE(channel != 0);

	UT_CHECK_TRUE(0 == ut_sock_getsock_info(sock, &channel->info.local_ip, &channel->info.local_port));
	UT_CHECK_TRUE(0 == ut_sock_getpeer_info(sock, &channel->info.remote_ip, &channel->info.remote_port));

	channel->sock = sock;
	channel->connection_data = rcvfunc;
	channel->user_data = data;

	UT_CHECK_TRUE(0 == do_deliver_socket(net, channel));
	net->new_func(channel, net->user_data, channel->user_data);

	return channel;

FAIL:
	ut_sock_close(sock);
	if (channel != 0)
	{
		channel->sock = ut_sock_invalid();
		channel->connection_data = 0;
		channel->user_data = 0;
		ut_channel_free(channel);
	}

	return 0;
}