0

最近、コードのこの部分を実行しました。

それは機能しますが、select() はうまく機能しません。
サーバーから最後の応答を取得すると、応答文字列の先頭にいくつかの奇妙な文字を含む最後の応答文字列を繰り返し始めます。だからこれを見てください:

:nacbot!monitor@nac.bot PRIVMSG testuser1 :VERSION
�C���C��monitor@nac.bot PRIVMSG testuser1 :VERSION
�C���C��monitor@nac.bot PRIVMSG testuser1 :VERSION
�C���C��monitor@nac.bot PRIVMSG testuser1 :VERSION
�C���C��monitor@nac.bot PRIVMSG testuser1 :VERSION

最初の文字列は、サーバーからの最後の応答です。したがって、次の文字列は単なるがらくたです。いくつかの検索エンジンで情報を探してみましたが、うまくいきませんでした。

4

1 に答える 1

2

問題があるのではなくselect、コード内のロジックです (当然のことです)。

selectstdin が読み取り可能であるために が返された場合でも、(c[0]最後に読み取ったサーバーから) を参照します。今回はサーバーから読み取っていませんが、\nリセットしたことがないため、まだ です。

このコードを移動します。

    if (c[0] == '\n' || c[0] == '\0') {                                        
        buf[--buflen] = '\0';                                                  
        handleMessage(buf, buflen);  /* Just print message */
        buf_do_clean = 1;                                                      
    }                                                                          

else if (rc == 1) {ブロックの中に。

于 2009-12-07T11:09:46.793 に答える