首先,必須保證不使用如下三個函數:
strcpy, strcat, sprintf.
因爲他們不檢查目的端的大小,如果源字符串長度大於目的端的緩衝區大小,則會導致程序崩潰。
所以如果在網絡服務器上使用瞭如上函數,假如客戶端不小心發送了一個超大的字符串過來,那麼服務器程序很容易崩潰。
替代方案如下:
strncpy, strncat, snprintf.
因爲他們指定了目的端的大小,如果源字符串長度太長,則多餘的內容會被丟棄。
其次,服務器端程序一定要保證協議層的緩衝區不被堵塞。避免方法有:
1,開闢一個專門的線程,一旦緩衝區內有內容就取出來了,後續處理的快慢沒有關係,再想辦法出來,比如說超時等等。
2,用select或者pselect。
3,accept後開闢新的線程去處理這個客戶端的連接。
還有,如果程序中需要操作數據庫,那麼可以用封裝成對象來連接,寫入。因爲這樣的話,此對象的操作是在棧上的操作,出了此程序段,對象自動析構,一點殘渣都不剩,如此下次再操作時菜比較安全。
最後,如果程序中用到鎖的話,除了互斥鎖,還有共享鎖可以考慮,因爲共享鎖可以同時多個線程來讀。另外,使用時也可以封裝成對象來使用,像操作數據庫一樣,最好也是使用對象,出了此程序段,對象自動析構,一點殘渣都不剩,這樣就不會存在鎖沒有釋放掉的情況下,又去使用這把鎖,從而導致死鎖。