Upgrade Socket pour multi-in
This commit is contained in:
		
							
								
								
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@ -0,0 +1 @@
 | 
				
			|||||||
 | 
					main
 | 
				
			||||||
							
								
								
									
										18
									
								
								Network.cpp
									
									
									
									
									
								
							
							
						
						
									
										18
									
								
								Network.cpp
									
									
									
									
									
								
							@ -7,11 +7,14 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
Network::Network(){
 | 
					Network::Network(){
 | 
				
			||||||
	conf = new Config("config.txt");
 | 
						conf = new Config("config.txt");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						strcpy(motd, conf->getValue("motd").c_str());
 | 
				
			||||||
 | 
						strcat(motd, "\n");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	memset(&server, 0, sizeof(server));
 | 
						memset(&server, 0, sizeof(server));
 | 
				
			||||||
	server.sin_family = AF_INET;
 | 
						server.sin_family = AF_INET;
 | 
				
			||||||
	server.sin_port = htons(stoi(conf->getValue("port")));
 | 
						server.sin_port = htons(stoi(conf->getValue("port")));
 | 
				
			||||||
	inet_aton(conf->getValue("ip").c_str(), &server.sin_addr);
 | 
						inet_aton(conf->getValue("ip").c_str(), &server.sin_addr);
 | 
				
			||||||
	/* server.sin_addr.s_addr = INADDR_ANY; */
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	main_socket = socket(server.sin_family, SOCK_STREAM, 0);
 | 
						main_socket = socket(server.sin_family, SOCK_STREAM, 0);
 | 
				
			||||||
	if(main_socket == -1){
 | 
						if(main_socket == -1){
 | 
				
			||||||
@ -29,8 +32,6 @@ Network::Network(){
 | 
				
			|||||||
void Network::run(){
 | 
					void Network::run(){
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	accepted_sock.resize(stoi(conf->getValue("conn_limit")));
 | 
						accepted_sock.resize(stoi(conf->getValue("conn_limit")));
 | 
				
			||||||
	/* motd = conf->getValue("motd").c_str(); */
 | 
					 | 
				
			||||||
	/* std::cout << motd << std::endl; */
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	while(!will_close){
 | 
						while(!will_close){
 | 
				
			||||||
		FD_ZERO(&readfds);
 | 
							FD_ZERO(&readfds);
 | 
				
			||||||
@ -56,7 +57,7 @@ void Network::run(){
 | 
				
			|||||||
			}
 | 
								}
 | 
				
			||||||
			accepted_sock.push_back(_incomming_socket);
 | 
								accepted_sock.push_back(_incomming_socket);
 | 
				
			||||||
			std::cout << "New Connection: " << inet_ntoa(new_sockaddr.sin_addr) << std::endl;
 | 
								std::cout << "New Connection: " << inet_ntoa(new_sockaddr.sin_addr) << std::endl;
 | 
				
			||||||
			/* if(send(_incomming_socket, &motd, sizeof(&motd), 0) == -1){perror("sendt");} */
 | 
								if(send(_incomming_socket, motd, strlen(motd), 0) == -1){perror("sendt");}
 | 
				
			||||||
		}else{
 | 
							}else{
 | 
				
			||||||
			for(int fd: accepted_sock){
 | 
								for(int fd: accepted_sock){
 | 
				
			||||||
				if(FD_ISSET(fd, &readfds)){
 | 
									if(FD_ISSET(fd, &readfds)){
 | 
				
			||||||
@ -65,11 +66,12 @@ void Network::run(){
 | 
				
			|||||||
						close(fd);
 | 
											close(fd);
 | 
				
			||||||
						accepted_sock.erase(std::find(accepted_sock.begin(), accepted_sock.end(), fd));
 | 
											accepted_sock.erase(std::find(accepted_sock.begin(), accepted_sock.end(), fd));
 | 
				
			||||||
					}else{
 | 
										}else{
 | 
				
			||||||
						msg[rcv_bytes] = '\0';
 | 
											std::cout << "he sent :" << rcv_bytes << " bytes and it says: " << msg;
 | 
				
			||||||
						std::cout << "he sent :" << msg << std::endl;
 | 
											if(std::strncmp("ping", msg, rcv_bytes-1) == 0){
 | 
				
			||||||
						if(std::strcmp(msg, "ping")){
 | 
												send(fd, "pong", 5, 0);
 | 
				
			||||||
							send(fd, "pong", 4, 0);
 | 
					
 | 
				
			||||||
						}
 | 
											}
 | 
				
			||||||
 | 
											
 | 
				
			||||||
					}
 | 
										}
 | 
				
			||||||
					break;
 | 
										break;
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
 | 
				
			|||||||
@ -27,8 +27,8 @@ private:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	sockaddr_in server, new_sockaddr;
 | 
						sockaddr_in server, new_sockaddr;
 | 
				
			||||||
	bool will_close = false;
 | 
						bool will_close = false;
 | 
				
			||||||
	char msg[1024];
 | 
						char msg[1025], motd[1025];
 | 
				
			||||||
	const char* motd;
 | 
						
 | 
				
			||||||
	int rcv_bytes;
 | 
						int rcv_bytes;
 | 
				
			||||||
	unsigned int sin_size = sizeof(struct sockaddr*);
 | 
						unsigned int sin_size = sizeof(struct sockaddr*);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user