Я довольно новичок в программировании Linux / сокетов.Я использую select
для проверки соединений в моей серверной программе (в конечном итоге это будет сервер чата).Я использую telnet, чтобы проверить это, и происходит нечто странное.Когда я впервые запускаю telnet (telnet localhost 5794), select
возвращает 1 и добавляет новое соединение в мой список дескрипторов основного файла.Все выглядит хорошо.
Но потом я пытаюсь набрать текст в telnet, и ничего не происходит.Выберите возвращает 0, если я не открываю новый сеанс Telnet.
Является ли select
только для поиска новых соединений?Я думал, что смогу использовать его для проверки ввода.Ниже приведена копия моего кода (в настоящий момент он немного грязный, потому что я яростно возился с ним последние пару часов. Извините)для newConnection:
bool newConnection(int serverSocket, fd_set& ConnectionList, int maxFD, user* userGroup){
printf("in newConnection\n");
struct sockaddr_storage remoteaddr;
socklen_t addrlen = sizeof remoteaddr;
int newFD = accept(serverSocket,(struct sockaddr *)&remoteaddr,&addrlen);
FD_SET(newFD, &ConnectionList);
if (newFD > maxFD)
maxFD = newFD;
printf("We have a new connection!!! (newConnetcion)\n");
bool userAdded = false;
for (int i = 0; i < 50; i++){
if (userGroup[i].active == false){
userGroup[i].socket = newFD;
userGroup[i].active = true;
userAdded = true;
printf("User added in the %ith position of the array.(socket number %i)\n",i,newFD);
break;
}
}
if (!userAdded)
printf("new user was not added! (newConnetcion)\n");
}
Функция checkConnections имеет printf в начале, поэтому я могу видеть каждый раз, когда она входит в функцию.Он никогда не печатает.