我正在创建一个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。
答案 0 :(得分:2)
来自QAbstractSocket文档
当QAbstractSocket位于时,套接字描述符不可用 UnconnectedState。
因此,在调用socketDescriptor
之前,您应该更改TCP套接字内部状态。对于客户端套接字,您可能需要将其连接到服务器,从而将其传递给ConnectedState
。