首先,必须保证不使用如下三个函数:
strcpy, strcat, sprintf.
因为他们不检查目的端的大小,如果源字符串长度大于目的端的缓冲区大小,则会导致程序崩溃。
所以如果在网络服务器上使用了如上函数,假如客户端不小心发送了一个超大的字符串过来,那么服务器程序很容易崩溃。
替代方案如下:
strncpy, strncat, snprintf.
因为他们指定了目的端的大小,如果源字符串长度太长,则多余的内容会被丢弃。
其次,服务器端程序一定要保证协议层的缓冲区不被堵塞。避免方法有:
1,开辟一个专门的线程,一旦缓冲区内有内容就取出来了,后续处理的快慢没有关系,再想办法出来,比如说超时等等。
2,用select或者pselect。
3,accept后开辟新的线程去处理这个客户端的连接。
还有,如果程序中需要操作数据库,那么可以用封装成对象来连接,写入。因为这样的话,此对象的操作是在栈上的操作,出了此程序段,对象自动析构,一点残渣都不剩,如此下次再操作时菜比较安全。
最后,如果程序中用到锁的话,除了互斥锁,还有共享锁可以考虑,因为共享锁可以同时多个线程来读。另外,使用时也可以封装成对象来使用,像操作数据库一样,最好也是使用对象,出了此程序段,对象自动析构,一点残渣都不剩,这样就不会存在锁没有释放掉的情况下,又去使用这把锁,从而导致死锁。