Я создаю приложение 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 не работает с ошибкой «Неверный файловый дескриптор», потому что m_tcpSocket->socketDescriptor() возвращает -1. Как получить дескриптор сокета для исходящего сокета перед его подключением? Или это нужно делать ПОСЛЕ подключения? (что, похоже, противоречит тому, что я понимаю из документов Qt)
Вышеприведенное отлично работает для прослушивающего сокета (QTcpServer).... только не для QTcpSocket.
setSocketOption
? - person Геннадий Казачё&   schedule 24.09.2014