Есть несколько проблем с вашим кодом, но, скорее всего, проблема заключается в том, что select
изменяет наборы, которые вы ему передаете.
Это означает, что readset
в нем есть два набора дескрипторов, но только один доступен для чтения, тогда второй будет удален из набора.
Вам необходимо сбросить наборы, которые вы передаете в select
перед следующим вызовом в l oop . Я предполагаю, что это то, для чего предполагается использовать masterset
, но вы забыли его использовать.
Что касается других проблем, наиболее серьезной из них является l oop condition i <= FD_SETSIZE
. Наборы дескрипторов на самом деле являются массивами, и ваш l oop приведет к ошибке «off-by-one» и индексации за пределами массива. Это, конечно, приводит к неопределенному поведению .