Example #1
0
File: hub.c Project: imobilis/uhub
static struct net_connection* start_listening_socket(const char* bind_addr, uint16_t port, int backlog, struct hub_info* hub)
{
	struct net_connection* server;
	struct sockaddr_storage addr;
	socklen_t sockaddr_size;
	int sd, ret;

	if (ip_convert_address(bind_addr, port, (struct sockaddr*) &addr, &sockaddr_size) == -1)
	{
		return 0;
	}

	sd = net_socket_create(addr.ss_family, SOCK_STREAM, IPPROTO_TCP);
	if (sd == -1)
	{
		return 0;
	}

	if ((net_set_reuseaddress(sd, 1) == -1) || (net_set_nonblocking(sd, 1) == -1))
	{
		net_close(sd);
		return 0;
	}

	ret = net_bind(sd, (struct sockaddr*) &addr, sockaddr_size);
	if (ret == -1)
	{
		LOG_ERROR("hub_start_service(): Unable to bind to TCP local address. errno=%d, str=%s", net_error(), net_error_string(net_error()));
		net_close(sd);
		return 0;
	}

	ret = net_listen(sd, backlog);
	if (ret == -1)
	{
		LOG_ERROR("hub_start_service(): Unable to listen to socket");
		net_close(sd);
		return 0;
	}

	server = net_con_create();
	net_con_initialize(server, sd, net_on_accept, hub, NET_EVENT_READ);

	return server;
}
Example #2
0
static int net_connect_job_process(struct net_connect_job* job)
{
	int sd;
	if (!job->con)
	{
		sd = net_socket_create(job->addr.ss_family, SOCK_STREAM, IPPROTO_TCP);
		if (sd == -1)
		{
			LOG_DEBUG("net_connect_job_process: Unable to create socket!");
			net_connect_callback(job->handle, net_connect_status_socket_error, NULL);
			return -1; // FIXME
		}

		job->con = 	net_con_create();
		net_con_initialize(job->con, sd, net_connect_job_internal_cb, job, NET_EVENT_WRITE);
		net_con_set_timeout(job->con, TIMEOUT_CONNECTED); // FIXME: Use a proper timeout value!
	}

	return net_connect_job_check(job);
}
static void test_request()
{
	LOG_TEST_START;
	
	__block unsigned int requestCount = 0;
	bool requestAck = true; // true unless error
	
	NetError netError;
	static const char * localhost = "0.0.0.0"; // Listening on all network interfaces
	
	// Receive Socket
	net_socket_t receiveSocket = net_socket_create(&netError, AF_INET, localhost, 0);
	assert(!netError);
	net_addr_t receiveSocketAddr;
	net_socket_local_addr(receiveSocket, &receiveSocketAddr);
	
	net_socket_receive_block_t testReceiveSocketBlock = Block_copy(^(net_packet_t packet) {
		assert(net_packet_len(packet) == testRequest1_length); // testRequest1
		assert(memcmp(testRequest1, packet->data, net_packet_len(packet)) == 0); // testRequest1
		++requestCount;
		net_packet_set_data(packet, testResponse1, testResponse1_length);
		net_socket_send(receiveSocket, packet); // testResponse1
		net_packet_release(receiveSocket, packet);
	});