Я пытаюсь установить связь между одним сервером и множеством клиентов. Сервер запускается и ждет подключения клиента. Мне удается одновременно открыть несколько сокетов через select. Когда я передаю некоторую информацию от клиента к серверу и последругому клиенту переменная, которая хранится, например, IP-адрес клиента (в типе char *) меняется на переменную, которую я только что прочитал
struct sockaddr_in address;
address.sin_family = AF_INET;
address.sin_addr.s_addr = inet_addr(clientIP);
address.sin_port = htons(clientport);
int addrlen = sizeof(address);
if (bind(master_socket, (struct sockaddr *)&address, sizeof(address))<0){
perror("bind failed");
exit(EXIT_FAILURE);
}
printf("Listener on port %d \n", serverport);
if (listen(master_socket, 3) < 0){
perror("listen");
exit(EXIT_FAILURE);
}
while(1){
FD_ZERO(&readfds);
FD_SET(master_socket, &readfds);
max_sd = master_socket;
for( i = 0 ; i < max_clients ; i++){
sd = client_socket[i];
if(sd > 0)
FD_SET( sd , &readfds);
if(sd > max_sd)
max_sd = sd;
}
activity = select( max_sd + 1 , &readfds , NULL , NULL ,NULL);
if (FD_ISSET(master_socket, &readfds)){
if ((new_socket = accept(master_socket,(struct sockaddr *)&address, (socklen_t*)&addrlen))<0){
perror("accept");
exit(EXIT_FAILURE);
}
for (i = 0; i < max_clients; i++){
//if position is empty
if( client_socket[i] == 0 ){
client_socket[i] = new_socket;
printf("Adding to list of sockets as %d\n" , i);
break;
}
}
//inform user of socket number - used in send and receive commands
//printf("New connection , socket fd is %d , ip is : %s , port : %d\n" , new_socket , inet_ntoa(address.sin_addr) , address.sin_port);
read(new_socket, buf, 1000);
//LAST PART
struct in_addr ip;
ip.s_addr=clip;
clientip=inet_ntoa(ip);//convert the integer IP to string(like 0.0.0.0)
Когда мой код достигает последней части, чтобы я мог преобразоватьIP в строку неожиданно происходит, например, у меня есть указатель для моего clientIP (char * clientIP), равный 195.134.65.92, и новый клиент с IP 195.134.65.95 внезапно меняет мой clientIP со своим значением. Я пыталсявсе, но ничего не помогает. Я использовал миллионы printfs до сих пор ничего.