摘要: 在TCP网络通信中,经常会出现客户端和服务器之间的非正常断开,需要实时检测查询链接状态。常用的解决方法就是在程序中加入心跳机制。从网络上找到,主要有以下方法实现TCP异常断开的检测:SO_KEEPALIVE,SIO_KEEPALIVE_VALS 和Heart-Beat线程。(1)SO_KEEPALIVE 机制这是socket库提供的功能,设置接口是setsockopt API:BOOL bSet=TRUE;setsockopt(hSocket,SOL_SOCKET,SO_KEEPALIVE,(constchar*)&bSet,sizeof(BOOL));根据MSDN的文档,如果为soc 阅读全文
posted @ 2013-12-29 15:49 将夜 阅读(2200) 评论(0) 推荐(0) 编辑
摘要: int snprintf(char *restrict buf, size_t n, const char * restrict format, ...);函数说明:最多从源串中拷贝n-1个字符到目标串中,然后再在后面加一个0。所以如果目标串的大小为n 的话,将不会溢出。函数返回值:若成功则返回欲写入的字符串长度,若出错则返回负值。Result1(推荐的用法)复制代码代码如下:#include #include int main(){ char str[10]={0,}; snprintf(str, sizeof(str), "0123456789012345678");/ 阅读全文
posted @ 2013-12-29 15:41 将夜 阅读(3520) 评论(0) 推荐(0) 编辑
摘要: C中volatile关键字在程序操作变量时,强制读写变量所在内存,以阻止编译器对某些特殊变量的错误优化。反过来,只有靠程序员用volatile过滤一些特殊情况后,编译器才能大胆优化。volatile作用可总结为:阻止三种情形下的两种编译器优化。两种编译器优化 a.数据流分析优化:编译器分析程序中变量在哪里赋值、哪里使用、哪里失效,根据分析结果消除多余的变量读取和赋值步骤,如: int a = 10; ......//其他代码,里面没有对a的读操作 a = 20; 开启了优化选项的编译器能够根据a赋值和使用情况,推断a=10无效,直接忽略这条语句。 b.寄存器缓存技术:把频繁访问的变量缓存到某. 阅读全文
posted @ 2013-12-29 15:34 将夜 阅读(308) 评论(0) 推荐(0) 编辑