Сокеты потока BSD имеют полный дуплекс, что означает, что две связанные стороны могут одновременно отправлять и получать.QTcpSocket действительно полный дуплекс?
QTcpSocket (реализация сокета qt) имеет асинхронную поддержку, неблокирующий режим, но может принадлежать только одному потоку, см. qt docs.
Объекты, управляемые событиями, могут использоваться только в одном потоке. В частности, это относится к механизму таймера и к сети .
Предположим, я хочу, чтобы поток tx и отдельный поток rx использовали один и тот же сокет и отправляли/принимали данные одновременно.
В моем понимании это может быть выполнено «через» сигналы/слоты qt, но нить сокета никогда не будет выполнять функции send() и receive() одновременно. Он просто запускает цикл событий, который будет делать это серийным образом и испускает сигналы при выполнении отправки/получения.
Да, мои потоки rx и tx могут работать одновременно и обрабатывать уведомления через слоты qt, но сам сокет никогда не используется в полнодуплексном режиме.
Правильно ли говорить, что: рассматривая только одну конечную точку, в потоке сокета, ее вызовы send() и receive() всегда последовательны, а не одновременно? (поскольку поток цикла события один нити только)
«Скажем, я хочу, чтобы поток tx и отдельный поток rx использовали один и тот же сокет и отправляли/получали данные одновременно». Нет, не могу этого сделать. Все операции над данным сокетом * ДОЛЖНЫ * выполняться в том же потоке. Если вы попробуете то, что предложили, это приведет к отказу нескольких утверждений отладки Qt. Кроме того, чтобы поместить сокет в другой поток из 'QTcpServer', вам нужно подклассифицировать его и сделать небольшую обманку. –
в моем примере есть три потока: резьба сокета, поток rx и поток tx. Socket thread запускает цикл событий и является единственным, выполняющим действительный send()/receive(). Потоки Rx и Tx просто управляют гнездом через сигналы/слоты или события. Это на 100% возможно. Мой вопрос о том, что действительно происходит в потоке сокета, где цикл событий действительно сериализует вызовы сокетов. – kcris