最近我完成了this部分代码。
确实有效,但是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
第一个字符串是服务器的最后一个回复。所以下一个字符串只是一些垃圾。 我试图在一些搜索引擎中查找信息,但没有运气。
答案 0 :(得分:2)
问题不是select
,而是代码中的逻辑(不出所料)。
如果select
因为stdin是可读的而返回,那么你仍然会看c[0]
(从上一次服务器读取) - 即使你这次没有从服务器读取,它仍然是{ {1}},因为你从未重置它。
移动这段代码:
\n
在 if (c[0] == '\n' || c[0] == '\0') {
buf[--buflen] = '\0';
handleMessage(buf, buflen); /* Just print message */
buf_do_clean = 1;
}
区块内。