D
Deine Frage hat nichts mit C zu tun, außer dass es ein C-API für diese Funktion gibt.
man 2 select schrieb:
select() conforms to POSIX.1-2001, POSIX.1-2008, and 4.4BSD (select()
first appeared in 4.2BSD). Generally portable to/from non-BSD
systems supporting clones of the BSD socket layer (including System V
variants). However, note that the System V variant typically sets
the timeout variable before exit, but the BSD variant does not.
pselect() is defined in POSIX.1g, and in POSIX.1-2001 and
POSIX.1-2008.
Deine Frage hat aber nicht zwangsläufig was mit Linux/Unix zu tun, sondern eher mit Programmlogik an sich. Mit select kannst du deine eigenen Timeouts definieren, herausfinden, wann Daten für den Socket bereitstehen, und die CPU-Last drücken. Aber das ist nur ein Baustein der Implementierung des Protokolls - dein Problem ist, dass du wissen musst, wie viele Bytes die andere Seite geschrieben hat, damit du dann diese Bytes vom Socket lesen kannst. Werden innerhalb einer bestimmten Zeit nicht genug gesendet (das kannst du dann z.B. mit select rausfinden und timen), kannst du die Verbindung neustarten lassen.
Aber wie viele Bytes kommen sollen, musst du der anderen Seite schon irgendwie mitteilen. Entweder durch fixe Längen, eventuell noch durch die Art der Anfrage (das X-Protokoll z.B. zeigt wunderschön, wie man's NICHT macht), oder indem in jeder Nachricht die Länge irgendwie ersichtlich ist (HTTP auch als Beispiel, wie man's NICHT macht - separat zu parsende Header, und entweder Content-Length oder Chunked Transfer - so viel Code für so einen Schwachsinn).