(リモート サーバーへの) アウトバウンド接続用の TCP ソケットを開く Linux C++/Qt5 アプリを作成しています。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");
残念ながら、m_tcpSocket->socketDescriptor() が -1 を返すため、setsockopt は「Bad file descriptor」エラーで失敗します。アウトバウンドソケットのソケット記述子を接続前に取得するにはどうすればよいですか? または、接続後にこれを行う必要がありますか? (これは、Qtのドキュメントから理解していることと一致しているようです)
上記は、リッスン ソケット (QTcpServer) では正常に機能します....QTcpSocket ではありません。