У меня есть клиентский TCP-сокет, который записывает несколько байтов каждые пять секунд, сервер отображает эти байты обратно.
Connect () и write () отлично работает, и у меня есть обратный вызов на уровне IP, который уведомляет меня о эхо-запросе сервера.Это происходит надежно между отправками.
Но у меня возникают проблемы с чтением эха из сокета.
Я пытался использовать select () , чтобы уведомить меня о входящем эхо,Странно, но мой обратный вызов не вызывался до тех пор, пока я не закрыл сокет, после чего он вызывался непрерывно.Однако для каждого из этих вызовов read () возвращает -1 / WOULD_BLOCK.
Мой второй подход вызывает асинхронно read () , когда уровень IP уведомляет меня овходящие данные.Аналогично, read () возвращает только -1 / WOULD_BLOCK.Я понимаю, что read () может превзойти данные на уровне сокетов, но, надеюсь, это будет означать больше чтения после следующей записи.
Я склонен думать, что якаким-то образом неправильно использует API, так как я - нуб IP / сокетов, а подход выбора вел себя так странно.
Это маловероятная глупая ошибка, поскольку практически идентичный путь кода прекрасно работает в режиме UDP.Единственные отличия: для UDP я использую режим DATAGRAM, sendto () и recvfrom ().Для TCP я использую режим STREAM, write () и read ().