Na początek powiem że dopiero zacząłem zabawę z socketami i nie jestem za bardzo kumaty. Mam pytanie czy da się przy użyciu funkcji select() zrobić tak żeby funkcja accept() nie blokowała programu? Mam taką funkcję połacz () którą wywołuję jako pierwszą w pętli a potem wywołuję odbior() ale accept() blokuje mi program i funkcja odbior() wywołuje się dopiero po podłączeniu wszystkich klientów? Jak zmienić tą funkcję select() żeby accept() nie blokował programu?
SOCKET serverSock;
struct klient {
SOCKET sock;
SOCKADDR_IN addr;
};
struct klient klieci[4];
SOCKADDR_IN serverAddr;
fd_set gniazda;
int sizeAddr;
int serverSizeAddr;
int ileKlietow= 0;
int i = 0;
void polacz()
{
FD_ZERO(&gniazda);
FD_SET(klieci[ileKlietow].sock, &gniazda);
select(0, &gniazda, NULL, NULL, (struct timeval *) 0);
if (FD_ISSET(klieci[ileKlietow].sock, &gniazda)) {
sizeAddr = sizeof(klieci[ileKlietow].addr);
klieci[ileKlietow].sock = accept(sSock, (struct sockaddr *) &klieci[ileKlietow].addr, &sizeAddr);
if (klieci[ileKlietow].sock == INVALID_SOCKET) {
return 1;
} else {
printf("Polonczono z klientem %d (%s).\n", ileKlietow, inet_ntoa(klieci[ileKlietow].addr.sin_addr));
FD_SET(klieci[ileKlietow].sock, &gniazda);
ileKlietow++;
}
}
}