Example #1
0
status_t
socket_set_max_backlog(net_socket *_socket, uint32 backlog)
{
	net_socket_private *socket = (net_socket_private *)_socket;

	// we enforce an upper limit of connections waiting to be accepted
	if (backlog > 256)
		backlog = 256;

	mutex_lock(&socket->lock);

	// first remove the pending connections, then the already connected ones as needed	
	net_socket *child;
	while (socket->child_count > backlog
		&& (child = (net_socket *)list_remove_tail_item(&socket->pending_children)) != NULL) {
		child->parent = NULL;
		socket->child_count--;
	}
	while (socket->child_count > backlog
		&& (child = (net_socket *)list_remove_tail_item(&socket->connected_children)) != NULL) {
		child->parent = NULL;
		socket_delete(child);
		socket->child_count--;
	}

	socket->max_backlog = backlog;
	mutex_unlock(&socket->lock);
	return B_OK;
}
Example #2
0
net_protocol*
init_protocol(net_socket** _socket)
{
	net_socket *socket;
	status_t status = socket_create(AF_INET, SOCK_STREAM, IPPROTO_TCP, &socket);
	if (status < B_OK)
		return NULL;

	status = socket->first_info->open(socket->first_protocol);
	if (status < B_OK) {
		fprintf(stderr, "tcp_tester: cannot open client: %s\n", strerror(status));
		socket_delete(socket);
		return NULL;
	}

	*_socket = socket;
	return socket->first_protocol;
}
Example #3
0
bool socket_remove(NetworkInterface* ni, uint32_t ip, uint16_t port) {
	Map* sockets = ni_config_get(ni, SOCKETS);
	if(!sockets)
		return false;

	uint64_t key = (uint64_t)ip << 32 | (uint64_t)port;
	Socket* socket = map_remove(sockets, (void*)key);
	if(!socket)
		return false;

	socket_delete(ni, socket);

	if(map_is_empty(sockets)) {
		map_destroy(sockets);
		ni_config_remove(ni, SOCKETS);
	}

	return true;
}
Example #4
0
int zsp_listener_stop(zsp_listener_t *listener)
{
	if (listener == NULL)
		return SSS_ERROR;

	if (listener->sock != NULL)
	{
		socket_shutdown(listener->sock);
		socket_delete(listener->sock);
		listener->sock = NULL;
	}
	if (listener->thread != NULL)
	{
		thread_stop(listener->thread);
		thread_delete(listener->thread);
		listener->thread = NULL;
	}
	listener->port = 0;

	return SSS_OK;
}
Example #5
0
int main()
{
	memset(&global_param, 0, sizeof(global_param));
	global_param.session = -1;

	socket_init();
	socket_new(&global_param.sock, SOCKET_TCP_TYPE);
	socket_connect(global_param.sock, "127.0.0.1", 1120);

	do
	{
		if (comm_to_server(ZSP_CMD_HELLO, NULL, 0, NULL, NULL) == SSS_ERROR)
			break;

		const char *filename = "E:/a.txt";
		char *resp_buf = NULL;
		int resp_len = 0;
		if (comm_to_server(ZSP_CMD_PLAY, filename, strlen(filename) + 1, &resp_buf, &resp_len) == SSS_ERROR)
			break;

		char *file_size_str = "file_size:"; 
		char *p = strstr(resp_buf, file_size_str);
		p += strlen(file_size_str);
		long file_len = atol(p);
		if (p <= 0)
			break;

		recv_file_from_server(file_len);

		if (comm_to_server(ZSP_CMD_BYE, NULL, 0, NULL, NULL) == SSS_ERROR)
			break;

	} while (0);

	socket_delete(global_param.sock);
	socket_fini();

	system("pause");
	return 0;
}