1

私はiosアプリケーションを実行しています。サーバーを起動し、着信接続をリッスンします。アプリケーションを実行しているデバイスがルーターの背後にある可能性があるため、ポートを転送する必要があります。DNSServiceNATPortMappingCreate を使用してポート フォワードを作成しようとしていますが、常にエラー コード -65540 が返されます。

DNSServiceRef *sdRef = NULL ;
void ( *DNSServiceNATPortMappingReply) (DNSServiceRef sdRef,
                                        DNSServiceFlags flags,
                                        uint32_t interfaceIndex,
                                        DNSServiceErrorType errorCode,
                                        uint32_t externalAddress,
                                        DNSServiceProtocol protocol,
                                        uint16_t internalPort,
                                        uint16_t externalPort,
                                        uint32_t ttl,
                                        void *context );

DNSServiceNATPortMappingReply = &DNSServiceNATPortMappingCreate_callback ;

DNSServiceErrorType error = DNSServiceNATPortMappingCreate(sdRef,
                                                           0,
                                                           0,
                                                           kDNSServiceProtocol_TCP,
                                                           htons(2000),
                                                           htons(5000),
                                                           0,
                                                          DNSServiceNATPortMappingReply,
                                                           NULL
) ;

これがコールバックです

void DNSServiceNATPortMappingCreate_callback(
                                         DNSServiceRef sdRef,
                                         DNSServiceFlags flags,
                                         uint32_t interfaceIndex,
                                         DNSServiceErrorType errorCode,
                                         uint32_t externalAddress, 
                                         DNSServiceProtocol protocol,
                                         uint16_t internalPort, 
                                         uint16_t externalPort, 
                                         uint32_t ttl, 
                                         void *context )
{
    printf("in callback\n") ;
}
4

1 に答える 1

2

DNSServiceDiscoveryのドキュメントに基づくと、エラー コード -65540 はkDNSServiceErr_BadParam.

のドキュメントは、最初の引数として渡されたものDNSServiceNATPortMappingCreateにストレージを割り当てる必要があることを示唆しています。DNSServiceRefつまり、変更する必要があります

DNSServiceRef *sdRef = NULL ;
DNSServiceErrorType error = DNSServiceNATPortMappingCreate(sdRef, ...

DNSServiceRef sdRef;
DNSServiceErrorType error = DNSServiceNATPortMappingCreate(&sdRef, ...
于 2013-07-16T09:13:20.780 に答える