The phrase "fundamentally broken" is overblown when referring to a syscall that works fine for most applications. "Doesn't scale" may not sound as glamorous in the title, but it's a lot more accurate.
Back in the old single-threading Unix days, select() was a good choice because it allows you to write a program handling async inputs in an easy style.