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问题所在,而是代码中的逻辑(不足为奇)。

如果select因为 stdin 可读而返回,那么您仍然查看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 回答