【发布时间】:2014-09-24 01:34:25
【问题描述】:
我正在创建一个 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。
【问题讨论】:
-
为什么不使用 qt 函数
setSocketOption呢?
标签: c++ qt sockets qtcpsocket setsockopt