最近我做了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
第一个字符串是服务器的最后回复。所以接下来的字符串只是一些垃圾。 我尝试在一些搜索引擎中查找信息,但没有成功。
最佳答案
这不是 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) {
block 内。
关于c - 套接字上的 select() (问题),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1859093/