J'ai le problème suivant. J'utilise Embarcadero Rad Studio 10.1 Berlin Firemonkey. Je veux me connecter à un serveur POP3 dans un réseau IPv6 où IPv4 n'est pas activé et j'obtiens l'erreur d'erreur de socket # 11004. Mon code est:Embarcadero Rad Studio Firemonkey Erreur de socket POP3 IPv6 Indy 11004
int port = 110;
pop3->Host = ...
pop3->Username = ...
pop3->Password = ..
pop3->AuthType = patUserPass;
pop3->IOHandler = iOHandlerStack;
iOHandlerStack->IPVersion = TIdIPVersion::Id_IPv6;
pop3->UseTLS = utNoTLSSupport;
pop3->Port = port;
iOHandlerStack->Port = port;
try
{
pop3->ConnectTimeout = 5000;
pop3->Connect();
int msgc = pop3->CheckMessages();
pop3->Disconnect();
ShowMessage("OK: " + IntToStr(msgc));
}
catch (Exception &exc)
{
ShowMessage(exc.Message);
}
Si j'utilise l'application dans un réseau IPv4, puis après avoir connecté la propriété IPVersion est réglé sur Id_IPv4 automatiquement et il n'y a pas de problème.
chose intéressante est que le code suivant fonctionne dans le réseau IPv6:
IdTCPClient->IPVersion = TIdIPVersion::Id_IPv6;
IdTCPClient->Host = ...
IdTCPClient->Port = 80;
IdTCPClient->Connect();
IdTCPClient->Disconnect();
ShowMessage("OK");
Toute suggestion?
Le problème est que la propriété IPVersion du composant TIdPOP3 est protégée, c'est pourquoi j'ai utilisé iohandler. – Ferenc
@Ferenc il ne devrait pas être protégé dans les descendants. Je réparerai ça quand j'aurai une chance. En attendant, vous pouvez utiliser une classe d'accès pour promouvoir la propriété: 'classe TIdPOP3Access: public TIdPOP3 {public: __property IPVersion; } ((TIdPOP3Access *) pop3) -> IPVersion = Id_IPv6; ' –
@Ferenc J'ai ouvert un ticket dans le programme de suivi des problèmes d'Indy pour cela: [Promouvoir la propriété IPVersion dans les clients TCP] (https://github.com/IndySockets/Indy/ issues/184) –