2014-09-24 82 views
0

我正在创建一个Linux C++/Qt5应用程序,它为出站连接(到远程服务器)打开一个TCP套接字。我创建了一个与QTcpSocket,然后尝试设置sockopt的选项如下:设置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。

+1

为什么你不使用qt函数'setSocketOption'呢? – 2014-09-24 09:57:04

回答

2

从QAbstractSocket文档

套接字描述不可用时QAbstractSocket是 UnconnectedState。

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

+0

似乎工作......我认为这个Qt文档不清楚。 – TSG 2014-09-25 02:03:41