Установите сокет QTcpSocket

Я создаю приложение Linux C ++ / Qt5, которое открывает TCP-сокет для исходящего соединения (с удаленным сервером). Я создаю QTcpSocket и затем пытаюсь установить параметры sockopt следующим образом:

m_tcpSocket = new QTcpSocket(this);
int fd = m_tcpSocket->socketDescriptor();
int enableKeepAlive = 1;  // Enable
if ( setsockopt(fd, SOL_SOCKET, SO_KEEPALIVE, &enableKeepAlive, sizeof(enableKeepAlive)) != 0)
reportsockoptError("SOL_SOCKET","SO_KEEPALIVE");

К сожалению, мой setsockopt завершается с ошибкой «Bad file descriptor», потому что m_tcpSocket-> socketDescriptor () возвращает -1. Как получить дескриптор сокета для исходящего сокета до его подключения? Или я должен сделать это ПОСЛЕ подключения? (что, кажется, противоречит тому, что я понимаю из документации Qt)

Вышеприведенное прекрасно работает для сокета прослушивания (QTcpServer) …. только не QTcpSocket.

0

Решение

Из документации QAbstractSocket

Дескриптор сокета недоступен, когда QAbstractSocket находится в
UnconnectedState.

Итак, перед звонком socketDescriptor, вы должны изменить внутреннее состояние сокета TCP. В случае клиентского сокета вам, вероятно, необходимо подключить его к серверу, передав его ConnectedState,

2

Другие решения


По вопросам рекламы [email protected]