2009-12-07 59 views
0

最近我做了this部分代码。select()on socket(trouble)

它可以工作,但select()工作不好。
当它从服务器得到最后一个回复时,它开始在回复字符串的开头重复上一个回复字符串,并带有一些奇怪的字符。 所以看看这个:

:[email protected] PRIVMSG testuser1 :VERSION 
�C���C��[email protected] PRIVMSG testuser1 :VERSION 
�C���C��[email protected] PRIVMSG testuser1 :VERSION 
�C���C��[email protected] PRIVMSG testuser1 :VERSION 
�C���C��[email protected] PRIVMSG testuser1 :VERSION 

第一个字符串是从服务器的最后一个回复。所以接下来的字符串只是一些垃圾。 我试图在一些搜索引擎中查找信息,但没有运气。

回答

2

这不是select有问题,它是你的代码中的逻辑(不出所料)。

如果select的回报,因为标准输入是可读的,那么你还是看看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) {块内。

+0

谢谢,这就是我一直在寻找的。现在我遇到了麻烦。 – mroztn 2009-12-07 11:50:04