【问题标题】:Set sockopt of QTcpSocket设置 QTcpSocket 的 sockopt
【发布时间】: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


【解决方案1】:

来自 QAbstractSocket 文档

当 QAbstractSocket 在时,套接字描述符不可用 未连接状态。

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

【讨论】:

  • 似乎有效...我认为 Qt 文档对此并不清楚。
猜你喜欢
  • 1970-01-01
  • 2021-12-20
  • 2018-02-25
  • 1970-01-01
  • 1970-01-01
  • 2013-05-20
  • 1970-01-01
  • 2013-12-31
  • 1970-01-01
相关资源
最近更新 更多