0

(リモート サーバーへの) アウトバウンド接続用の 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 ではありません。

4

1 に答える 1

2

QAbstractSocket のドキュメントから

QAbstractSocket が UnconnectedState の場合、ソケット記述子は使用できません。

したがって、 を呼び出す前にsocketDescriptor、TCP ソケットの内部状態を変更する必要があります。クライアント ソケットの場合、おそらくサーバーに接続する必要があるため、 に渡しますConnectedState

于 2014-09-24T09:47:51.410 に答える