Да, сокет имеет входящие данные, буферизованные в пространстве ядра - это то, что вы получите, когда вызовете read()
, после первого возврата select()
, указывающего, что есть что-то доступное для чтения. Если вы еще не прочитали все это, тогда, конечно, немедленно вернется еще один select()
.
Если у вас есть с именем read()
, то это, вероятно, означает, что доступно больше данных, чем вы прочитали, и вам следует продолжить чтение, пока вы не получите все это. Здесь возникает проблема только в том случае, если вызов read()
завершается неудачно или блокируется после того, как select
указал, что он доступен для чтения, или если у вас есть основания полагать, что после того, что вы уже прочитали, не должно быть никаких данных.