(продолжение этого).
Итак, решил я своему «видеотранслятору» сделать жестокую проверку. Наклепал код:
<html>
<head><title>Simple streaming test</title>
<script>
var img = new Image();
img.onload = function(){
document.getElementById("animage").src = img.src;
setTimeout(stream_next, 50);
}
function stream_next(){
img.src = "http://localhost:54321/" + Math.random() + ".jpg";
}
</script>
</head>
<body onload="stream_next();">
<img id="animage">
</body>
</html>
DBG("accept");
newsock = accept(sock, (struct sockaddr*)&their_addr, &size);
if(newsock <= 0){
WARN("accept()");
continue;
}
pthread_t handler_thread;
if(pthread_create(&handler_thread, NULL, handle_socket, (void*) &newsock) < 0)
WARN("pthread_create()");
По идее, если бы кончились файловые дескрипторы, accept вернул бы ошибку → появилось бы соответствующее сообщение.
Следовательно, косяк в потоках.
Не может ли быть такого, что у меня понасоздавалась куча потоков, к которым не было pthread_join
и из-за этого новые потоки создаваться перестали??
Как вообще в таких случаях обрабатывают потоки, чтобы не было «зомби»? Может быть, впилить пул потоков и в отдельном потоке запускать на каждый новый pthread_join
? Вообще ничего разумного в голову не приходит...