다음과 같은 문제가 있습니다. 나는 Embarcadero Rad Studio 10.1 Berlin Firemonkey를 사용합니다. IPv4가 활성화되어 있지 않은 IPv6 네트워크에서 POP3 서버에 연결하고 소켓 오류 # 11004 오류가 발생합니다. 내 코드는 다음과 같습니다Embarcadero Rad Studio Firemonkey Indy POP3 IPv6 소켓 오류 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);
}
내가 자동으로 Id_IPv4로 설정되어 IPVersion 속성을 연결 한 후 다음 IPv4 네트워크 내에서 응용 프로그램을 사용해도 아무 문제가없는 경우.
흥미로운 점은 다음과 같은 코드가 IPv6 네트워크 내에서 작동한다는 것입니다 :
IdTCPClient->IPVersion = TIdIPVersion::Id_IPv6;
IdTCPClient->Host = ...
IdTCPClient->Port = 80;
IdTCPClient->Connect();
IdTCPClient->Disconnect();
ShowMessage("OK");
어떤 제안?
문제는 TIdPOP3 구성 요소의 IPVersion 속성이 보호된다는 것입니다. 이것이 iohandler를 사용하는 이유입니다. – Ferenc
@Ferenc 그것은 자손에서 보호되어서는 안됩니다. 나는 기회가 생길 때 그것을 고칠 것이다. 그 동안 액세스 클래스를 사용하여 속성을 홍보 할 수 있습니다.'class TIdPOP3Access : public TIdPOP3 {public : __property IPVersion; }; (TIdPOP3Access *) pop3) -> IPVersion = Id_IPv6; ' –
@Ferenc Indy의 이슈 추적기에 [TCP 클라이언트의 IPVersion 속성 올리기] (https://github.com/IndySockets/Indy/) 티켓을 열었습니다. 이슈/184) –