read()
возвращает -1 в EOS, который вы полностью игнорируете.Когда вы получаете EOS, вы должны либо закрыть канал, либо хотя бы отменить интерес к OP_READ.В противном случае вы просто получите еще один OP_READ и еще один -1, когда будете читать, как вы делаете, навсегда.Вопреки вашим комментариям выше, read()
возвращает ноль при пустом чтении.Вы можете игнорировать это, на самом деле вы даже не увидите его, если будете читать только когда isReadable()
, если только вы не читаете в цикле, но вы не должны игнорировать EOS.