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 ソケットが不良になっていることがわかっている場合は、再バインドできますが、エラーは発生せず、同時に他のエンド ステーションからのメッセージも受信されません。