Пример #1
0
static void		server(int sock)
{
	char			buff[BUF_SIZE + 1];
	int				actual;
	t_server		server;

	actual = 0;
	init_server(&server, sock);
	while (1)
	{
		init_fds(&server, actual);
		if (select(server.max + 1, &server.rdfs, NULL, NULL, NULL) == -1)
			exit_error("select");
		if (FD_ISSET(STDIN_FILENO, &server.rdfs))
			break ;
		else if (FD_ISSET(server.sock, &server.rdfs))
		{
			if (new_client(&server, &actual, buff) == -1)
				continue ;
		}
		else
			client_talking(&server, &actual, buff);
	}
	clear_clients(server.clients, actual);
	close(server.sock);
}
Пример #2
0
static int			server_select(t_server *server, int *actual)
{
	char			buff[BUF_SIZE + 1];
	struct timeval	tv;

	tv.tv_sec = 0;
	tv.tv_usec = 1;
	if (select(server->max + 1, &server->rdfs, NULL, NULL, &tv) == -1)
		exit_error("select");
	else if (FD_ISSET(server->sock, &server->rdfs))
	{
		if (server_new_client(server, actual, buff))
			return (1);
	}
	else if (FD_ISSET(server->gfxsock, &server->rdfs))
	{
		if (new_gfxclient(server, buff) == -1)
		{
			server->gfx.sock = 0;
			return (1);
		}
	}
	else
		client_talking(server, actual, buff);
	return (0);
}