Citat:
Predrag Damnjanovic:
Code:
while (1)
{
// accept connections
newsock = sockaccept(pfs_sock);
if (newsock < 0)
{
perror("sockaccept");
exit(1);
}
pthread_create(&tid, NULL, (void*) &pfs_thread, (void*) newsock);
}
while (1)
{
// accept connections
newsock = sockaccept(pfs_sock);
if (newsock < 0)
{
perror("sockaccept");
exit(1);
}
pthread_create(&tid, NULL, (void*) &pfs_thread, (void*) newsock);
}
Peco, ja se polomih da objasnim da ovaj pristup ne valja. Da budem precizniji, može lepo da radi sa malim brojem zahteva, ali kod većeg saobraćaja dolazi do naglog pada performansi.
Ono što ti predlažem (Linux varijanta) je:
1. Kreiraš socket koji "sluša" port 80
2. Kreiraš jedno 5 niti (ili forkuješ 5 procesa, kako ti je lakše) i svaki od njih zove accept () na isti onaj socket koji si kreirao pod 1). Dakle, pthread_create zoveš samo na početku programa. Svaka od ovih niti (procesa) obrađuje po jedan korisnikov zahtev, a onda opet zove accept() i to je baci u "usnulo stanje" dok ne stigne sledeći klijent.