Итак, я пытаюсь построить асинхронный сервер ... Вот краткое изложение того, что у меня есть:
int sockfd;
int max;
fd_set socks;
set<int> conns;
bind();
listen(sockfd);
while(1){
FD_ZERO(&socks);
max = sockfd;
FD_SET(sockfd, &socks);
for(set<int>::iterator it=conns.begin(); it!=conns.end(); it++){
FD_SET(*it, &socks);
if(max < *it){
max = *it;
}
}
int res = select(max+1, &socks, NULL, NULL, NULL);
if(res < 0){
cerr << "ERROR with select" << endl;
break;
}else if(res){
if(FD_ISSET(sockfd, &socks)){
//new connection
int new_sockfd = accept();
conns.insert(new_sockfd);
}else{
for(set<int>::iterator it=conns.begin(); it!=conns.end(); it++){
if(FD_ISSET(*it, &socks){
char buffer[256];
read(buffer, 256, *it);
cout << buffer << endl;
close(*it);
conns.erase(*it);
}
}
}
}
}
Что в итоге происходит ... Если я подключу клиента-1, а затем клиента-2. А потом я пытаюсь отправить данные, используя Client-2, а затем Client-1 ... это работает ...
Однако, если я подключаю клиент-1, а затем подключаю клиент-2 ... и затем пытаюсь отправить данные, используя клиент-1. Select () возвращает -1 ...
Помощь