(продолжение этого).
Итак, решил я своему «видеотранслятору» сделать жестокую проверку. Наклепал код:
<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? Вообще ничего разумного в голову не приходит...


