1

nanomsgライブラリを使用して受信ソケットを作成し、nn_recv()以下のコードが示すようにメッセージを送信しようとしました:

recv_bytes = nn_recv ( socket_id, &buf, NN_MSG, 0 );

が < 0の場合、recv_bytes次のようにします。

    if ( recv_bytes <= 0) {

         struct nn_polld pfd[1] ;
        
         pfd[0].fd = socket_id;
         pfd[0].events = NN_POLLIN;
            
         rc = nn_poll ( pfd, 1, 2000 );

         if ( rc == 0 ) {
              printf ( "Timeout!" );
           // exit (1);
         }

         if ( rc == -1 ) {
              printf ( "Error!" );
           // exit (1);
         }
            
         if ( pfd [0].revents & NN_POLLIN ) {
              printf ( "Message can be received from s1!" );
           // exit (1);
         }
    }

テキストはまったく表示されませんError!。常に他のプリントが表示されますが、ソケットに再バインドするまでメッセージを受信しません。

NN_POLLエラーを取得して再接続/バインドする方法があるかどうかを知りたかったのです。問題は、タイマーでランダムに実行したくないことです。

提案してください。

エンド ステーションの 1 つが閉じられたときに、エンドポイントからメッセージを受信できません。nanomsg ソケットが不良になっていることがわかっている場合は、再バインドできますが、エラーは発生せず、同時に他のエンド ステーションからのメッセージも受信されません。

4

1 に答える 1