0

我正在创建一个 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。

4

1 回答 1

2

来自 QAbstractSocket 文档

当 QAbstractSocket 处于 UnconnectedState 时,套接字描述符不可用。

因此,在调用之前socketDescriptor,您应该更改 TCP 套接字内部状态。对于客户端套接字,您可能需要将其连接到服务器,从而将其传递给ConnectedState.

于 2014-09-24T09:47:51.410 回答