Beispiel #1
0
void servershell(int pid)
{
	t_server *server;

	signal(SIGINT, ft_serv_end);

	write(1, "server\n", 7);
	server = ft_serv_init();
	recup(server);
	ft_socktcp(&server->sock, PORT, server->server);
	new_connect(server);

//	server->pid = 1;
//	while (server->pid)
		acceuil(server, pid);
//	waitpid(server->pid, NULL, 0);
}
/**
 * @brief Wait for message received
 *
 * @param msg_handler 	Callback for message processing
 * @param msg_info		Handler for epoll and listen socket
 */
void msg_run(struct msg_info *msg_info, msg_handler_fn_t msg_handler)
{
	struct epoll_event events[MAXEVENTS];
	struct epoll_event *event;
	int n, i;
	int fd;
	int ret = -1;
	int efd = msg_info->efd;
	int listen_fd = msg_info->listen_fd;

	while (1)
	{
		n = epoll_wait(efd, events, MAXEVENTS, -1);
		if (-1 == n)
		{
			DEBUG_ERROR("epoll wait error\n");	
			break;
		}

		for (i = 0; i < n; i++)
		{
			event = &events[i];
			fd = event->data.fd;

			if (listen_fd == fd)
			{
				ret = new_connect(listen_fd, efd);
				if (0 != ret)
				{
					printf("accept error\n");
				}
			}
			else
			{
				ret = dispatch_msg(efd, event, msg_handler);
				if (0 != ret)
				{
					printf("Dispatch message failed\n");
				}
			}

		}

	}
}