2016-09-23 2 views
0

私はGoogleネイティブクライアント(pNacl)モジュールを作成しようとしています。 クライアントは、リモートサーバーからデータを取得することになっています。
モジュールから関数を呼び出しても問題ありません。
私は非常に始めているので、クライアントがデータをまったく送信することはできません。 getaddrinfoでIPアドレスを非常に基本的に検索しても動作しません。
wiresharkでネットワークトラフィックをダンプすると、パケットが送信されていないことがわかります。 errnoは、 "機能が実装されていません"というgetaddrinfoを参照しています。この単純なコードでさえ機能しません。これは、単独のクライアントとしてではなくネイティブのクライアントモジュールとして動作します。
ブラウザは、エラーを与える:
**信頼できないコードからの信号4:PC = 6d98000b3360pNaCl UDPクライアントgetaddrinfo機能が実装されていません - 信頼できないコード

誰も私が間違ってやっているの手掛かりを持っていますか?

#include <stdio.h> 
#include <string.h> 
#include <stdlib.h> 
#include <arpa/inet.h> 
#include <sys/socket.h> 
#include <sys/types.h> 
#include <netdb.h> 
#include <errno.h> 

void foo(){ 

    int rc; 
    struct addrinfo hints, *info; 

    memset(&hints, 0, sizeof(hints)); 

    hints.ai_socktype = SOCK_DGRAM; 
    hints.ai_family = AF_INET; 

    fprintf(stderr, "Trying: www.google.com\n"); 
    rc = getaddrinfo("www.google.com", "80", &hints, &info); 
    if(rc != 0) { 
     fprintf(stdout, "getaddrinfo: %s\n", gai_strerror(rc)); 
     fprintf(stdout, "Error: %s\n", strerror(errno)); 
    } 
    freeaddrinfo(info); 
} 

答えて

0

あなたのネットワークアクセスは、その実装でPPAPI(Pepper Plugin API)を呼び出すNaClIOレイヤーを経由しています。これらのAPIには特別な権限が必要です。セキュリティ上の理由から、TCP/UDPは開いているWebに公開されません。

は、このスレッドを参照してください: https://groups.google.com/forum/#!topic/native-client-discuss/NmIUvpLZ1uI

0

だから私はそれが結局働いてしまいました。 主な問題は、関数がメインスレッドで呼び出されたことでした。 バックグラウンドスレッドで呼び出される必要があり、nacl_io_init_ppapi(...)で正しく初期化する必要のあるnacl_ioライブラリを使用しました。 nacl_io_init()による初期化は何らかの理由で機能しませんでした。

私はpp :: Instanceクラスのコンストラクタに両方を追加しました。関数foo()の中にスレッドを追加しても機能しませんでした。最初に呼び出されなければならないように見えます。

#include <pthread.h> 
#include <nacl_io.h> 
... 

pthread_t handle_msg_thread; 
void *handleMsgThreadFunc(void * data); // Calls function foo() 

class MyInstance : public pp::Instance { 
    public: 
    explicit MyInstance(PP_Instance instance) :pp::Instance(instance) { 
     nacl_io_init_ppapi(instance, pp::Module::Get()->get_browser_interface()); 
     pthread_create(&handle_msg_thread, NULL, &handleMsgThreadFunc, NULL); 
    } 
    ... 
} 
関連する問題