Witam,
w zasadzie dopiero zaczynam programowanie gniazd - zaczalem pisac program (klient-serwer) dzialajacy na zasadzie prostego komunikatora.
No i tu zaczynaja sie schody - postanowilem uzyc funkcji select(), tylko mysle juz od dluzszego czasu w jaki sposob zrealizowac cos takiego, zeby program zachowywal sie jak popularne komunikatory - caly czas oczekiwal na wiadomosc i jednoczesnie zeby byla mozliwosc wpisywania tekstu i dopiero po zatwierdzeniu enterem - wiadomosc zostala przeslana do klienta (i odwrotnie), jak na razie naskrobalem cos takiego:
Kod:
for(;;)

**{

**** if (select(maxfs+1, &read_fds, &write_fds, NULL, NULL) == -1)

**** {

********perror("select");

********getch();

********exit(1);

**** }

**** for (int j=0;j<10000;j++)

**** {

********if (FD_ISSET(j, &read_fds))

********{

********** if ((numbytes=recv(sock2, buf, 100-1,0))==-1)

********** {

**************perror("recv");

**************getch();

**************exit(1);

********** }

********** FD_CLR(j,&read_fds);

********}

********if (FD_ISSET(j, &write_fds))

********{

********** gets(message);

********** int mess_len=strlen(message);

********** if (send(sock2,message,mess_len,0) == -1)

********** {

**************perror("send");

**************getch();

**************exit(1);

********** }

********** FD_CLR(j,&write_fds);

********}

**** }

**}
To oczywiscie samo "serce" programu.
Oczywiscie nie ma prawo to dzialac, podaje jedynie po to ten kod, dla zasygnalizowania o co mi chodzi.
W niekonczacej sie petli for zamiescilem funkcje select(), ktora mialaby "stwierdzic", czy ktores z gniazd jest otwarte do odczytu i odczytac jesli cos nadeszlo, a jesli nie, to wyslac.
Nie licze na napisanie calego programu za mnie - chodzi o wskazanie dalszej dogi ku rozwiazaniu tego problemu, bo na etapie w programowaniu gniazd, na ktorym sie aktualnie znajduje (czytalem podrecznik Beej'a oraz fragmenty man) raczej nie jestem w stanie wymyslec cos wiecej...

Bede wdzieczny za kazda pomoc.

Pozdrawiam.