2009-12-07 58 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