Название: QTcpServer v4/v6 Отправлено: LisandreL от Январь 22, 2014, 22:25 Есть ли возможность заставить QTcpServer принимать соединения только по IPv4? А по IPv6? Я понимаю, что могу уже в созданном сокете посмотреть протокол и дропнуть если не тот, который нужнен, но всё же вдруг есть вариант такие подключения вообще не принимать.
Ну и аналогичный вопрос с другой стороны. Если есть QTcpSocket и я делаю connectToHost не по ip, а по доменному имени, то есть ли возможность задать версию ip протокола или надо в «ручную» ресолвить доменное имя и коннектиться уже только по ip нужного типа? Название: Re: QTcpServer v4/v6 Отправлено: Serr500 от Январь 23, 2014, 07:45 Есть ли возможность заставить QTcpServer принимать соединения только по IPv4? А по IPv6? Если в listen указать ipv6 адрес, то сокет будет слушать только ipv6, если ipv4, то только ipv4.Если есть QTcpSocket и я делаю connectToHost не по ip, а по доменному имени, то есть ли возможность задать версию ip протокола или надо в «ручную» ресолвить доменное имя и коннектиться уже только по ip нужного типа? Вы меня разочаровываете...Цитата: Qt Documentation void QAbstractSocket::connectToHost(const QString & hostName, quint16 port, OpenMode openMode = ReadWrite, NetworkLayerProtocol protocol = AnyIPProtocol) [virtual] Attempts to make a connection to hostName on the given port. The protocol parameter can be used to specify which network protocol to use (eg. IPv4 or IPv6). enum QAbstractSocket::NetworkLayerProtocol This enum describes the network layer protocol values used in Qt. Constant Value Description QAbstractSocket::IPv4Protocol 0 IPv4 QAbstractSocket::IPv6Protocol 1 IPv6 QAbstractSocket::AnyIPProtocol 2 Either IPv4 or IPv6 QAbstractSocket::UnknownNetworkLayerProtocol -1 Other than IPv4 and IPv6 Название: Re: QTcpServer v4/v6 Отправлено: LisandreL от Январь 23, 2014, 07:56 Вы меня разочаровываете... Увы, в 4.8 такого параметра нет. А на 5-ку мы ещё не перешли.void QAbstractSocket::connectToHost(const QString & hostName, quint16 port, OpenMode openMode = ReadWrite, NetworkLayerProtocol protocol = AnyIPProtocol) [virtual] Если в listen указать ipv6 адрес, то сокет будет слушать только ipv6, если ipv4, то только ipv4. Ну мне надо не с конкретного ip коннекты получать, а с любого.Для Qt5 вероятно подойдут QHostAddress::AnyIPv4 и QHostAddress::AnyIPv6. Название: Re: QTcpServer v4/v6 Отправлено: Serr500 от Январь 23, 2014, 08:44 Увы, в 4.8 такого параметра нет. А на 5-ку мы ещё не перешли. Упс... Извиняюсь. Давно уже не использую четвёрку. :)Ну мне надо не с конкретного ip коннекты получать, а с любого. Именно так.Для Qt5 вероятно подойдут QHostAddress::AnyIPv4 и QHostAddress::AnyIPv6. UPD. Для 4.8: Код: QHostAddress::Any 4 The IPv4 any-address. Equivalent to QHostAddress("0.0.0.0"). |