- 博客(38)
- 资源 (17)
- 收藏
- 关注
转载 Socket send函数和recv函数详解
int send( SOCKET s, const char FAR *buf, int len, int flags ); 不论是客户还是服务器应用程序都用send函数来向TCP连接的另一端发送数据。客户程序一般用send函数向服务器发送请求,而服务器则通常用send函数来向客户程序发送应答。该函数的第一个参数指定发送端套接字描述符;
2011-12-30 16:39:40 778
转载 errno — Standard errno system symbols
This module makes available standard errno system symbols. The value of each symbol is the corresponding integer value. The names and descriptions are borrowed from linux/include/errno.h, which sh
2011-12-30 16:33:28 876
原创 网络发送时 返回值小于零的情况
while (len > 0) { res = write (c->sock_fd, tcp_buf, len); if (res < 0) { switch (errno) { case EAGAIN: case EINTR: break; default:
2011-12-30 16:19:46 662
转载 epoll模型的使用及其描述符耗尽问题的探讨
每次接受新连接的时候,我监视了这几个事件。EPOLLIN | EPOLLET | EPOLLERR | EPOLLHUP | EPOLLPRI;每次有一批事件返回,经过统计 返回的一批fd数量=出错关闭的fd数量+由EPOLLIN转为EPOLLOUT的fd数量+EPOLLOUT正常处理关闭的fd的数量。 也就是说,每批事件都完全处理,没有遗漏。观察发现EPOLLET
2011-12-27 21:00:10 764
转载 gcc 交叉编译错误之一: multiple definition of
1、问题:在common.h中放着“全局变量”:包括函数和变量,在其他*.cpp文件中包含#include "common.h",交叉编译时,出现multiple definition问题; 2、原因:由于工程中的每个文件都是独立的解释的,即使头文件有: #ifndef _x_h ....#enfif在其他文件中只要包含了common.h 就会独立的解释,
2011-12-26 13:57:02 1558
转载 模板类的使用---模板类,最好连同实现都放到.h里头
1. 将C++模板类的声明和定义都放在一个文件,如.h或.cpp文件中 使用的时候加入#include "模板类文件名.h(或.cpp)“即可。 2. 将C++模板类的声明和定义分别放在.h和.cpp文件中 且在.cpp文件中包含 #include ".h" 不过在使用时,会因为不同的开发环境而有所不同: a. 在集成开发环境code::blo
2011-12-26 10:14:09 1159
转载 int listen(int sockfd, int backlog) 第二个参数 解疑
int listen(int sockfd, int backlog)backlog 是未经过处理的连接请求队列可以容纳的最大数目。 即每一个连入请求都要进入一个连入请求队列,等待 listen 的程序调用accept()函数来接受这个连接。当系统还没有 调用accept()函数的时候,如果有很多连接,那么本地能够等待的最大数目就是backlog
2011-12-21 17:25:03 4318
转载 类模板与模板类
1.类模板与模板类的概念⑴ 什么是类模板 一个类模板(也称为类属类或类生成类)允许用户为类定义一种模式,使得类中的某些数据成员、默写成员函数的参数、某些成员函数的返回值,能够取任意类型(包括系统预定义的和用户自定义的)。 如果一个类中数据成员的数据类型不能确定,或者是某个成员函数的参数或返回值的类型不能确定,就必须将此类声明为模板,它的存在不是代表一个具体的、实际的类,而是代表着一类类。
2011-12-21 11:33:10 563
转载 Linux新系统必装软件(Ubuntu及类似系统)
1、安装完成系统后,我们应该先修改一下root密码,否则无法登录root用户,命令如下:sudo passwd root //修改root用户密码2、在Linux工作的人经常用的编辑器是vim,所以我要把它安装上,其实系统安装后默认安装的是vi,它的一些键盘对我们来说是不适应的,所以我们要安装它的提高版本——vim,命令如下:sudo apt-get install vimvim安
2011-12-20 20:22:21 3866
转载 ubuntu 11.04英文环境下使用ibus输入中文,并且自动启动输入法 ibus介绍
1. 安装我安装11.04英文,默认也已经安装好了ibus输入法,sudo apt-get install ibus #安装ibus输入法框架,可能提示已经安装,没关系sudo apt-get install ibus-pinyin #安装ibus的拼音输入法sudo apt-get install ibus-sunpinyin #安装ibus的另一种拼音输入法
2011-12-20 14:20:32 4198
转载 VMware下Ubuntu与宿主机简单共享文件夹
VMware下Windows与Linux共享文件的方法有很多,比如Samba等等,我这里介绍简单地通过设置VMware来达到共享的目的。1、打开VMware的设置,在“options”选项卡,找到“Shared Folders”,在左侧选择为“Always enable”,并点击下方的“Add”按钮。 2、弹出添加共享文件夹向导,Next 3、设置共享的目录和共享名,我们这
2011-12-20 14:18:21 1353
原创 服务器应用--双缓冲队列
在服务器开发中 通常的做法是 把 逻辑处理线程和I/O处理线程分离。 逻辑处理线程:对接收的包进行逻辑处理。 I/0处理线程:网络数据的发送和接收,连接的建立和维护。 通常 逻辑处理线程和I/O处理线程是通过数据队列来交换数据,就是生产者--消费者模型。 这个数据队列是多个线程在共享,每次访问都需要加锁,因此如何减少 互斥/同步的开销就显得尤为重要。
2011-12-19 10:25:57 6310 3
转载 spserver 开源服务器框架研究与分析
网上开源的C/C++服务器框架 还是比较少的。 最近研究了 spserver , 里面用了较多的设计模式,使用设计模式的目的是把不变的东西和可变的东西分离并且封装起来,避免以后修改代码, 所谓 “对修改关闭,对扩展开放”,但是滥用设计模式会把简单的问题复杂话了。 spserver代码量比较少,比较容易看懂,如果只是做一个简单的echo服务器的话,spserver 可以给新手一个快速搭
2011-12-17 14:15:09 3714
转载 线程终止方式:pthread_cleanup_push/pthread_cleanup_pop()
以下内容根据【1】进行整理。关于取消点,将在后面进一步讨论。1、一般来说,Posix的线程终止有两种情况:正常终止和非正常终止。线程主动调用pthread_exit()或者从线程函数中return都将使线程正常退出,这是可预见的退出方式;非正常终止是线程在其他线程的干预下,或者由于自身运行出错(比如访问非法地址)而退出,这种退出方式是不可预见的。2、线程终止时的清理
2011-12-16 13:46:43 736
原创 string 用法小结
1 long to char * char basetime[32];long mBaseTime;mBaseTime = (long)time(NULL);memset(basetime,0,sizeof(basetime));ltoa(mBaseTime,basetime,10); basetime:“1345636789”2 cha
2011-12-15 17:08:29 528
转载 epoll模型设计海量级连接服务器
最近在参与一个海量级(20000以上)远程连接的服务器设计,由于用户要求的硬件平台仅限于Linux,因此选择了epoll模型来实现对海量客户端连接的处理。先聊一下epoll模型的基本情况。(一般来说,非海量级客户端连接的服务器,可能用不到epoll模型。一方面是由于epoll模型不能跨平台,另一方面初学者面露难色)。使用到epoll_create,epoll_ctl,epoll_wait,cl
2011-12-13 17:27:12 1914
转载 架构设计:生产者/消费者模式
概述今天打算来介绍一下“生产者/消费者模式”,这玩意儿在很多开发领域都能派上用场。由于该模式很重要,打算分几个帖子来介绍。今天这个帖子先来扫盲一把。如果你对这个模式已经比较了解,请跳过本扫盲帖,直接看下一个帖子(关于该模式的具体应用)。看到这里,可能有同学心中犯嘀咕了:在四人帮(GOF)的23种模式里面似乎没听说过这种嘛!其实GOF那经典的23种模式主要是基于OO的(从书名《Design
2011-12-13 17:22:35 833
转载 集群式游戏服务器架构方案设计开发
自从2003年开发VOIP Radius Server以及修改Gnugk以来,从事服务器开发已经近五年了,对服务器开发也有一些自己独到的看法以及见解。当摆脱了技术本身的束缚之后,才理解重要的并不是某种技术的运用,而是整体设计的考虑,也慢慢明白了设计是开发的灵魂的道理。从技术层面来看,各个平台都有一些自己特有的东西,比如Windows 平台下面的IOCP技术,可以说为了支持大的并发,IOCP
2011-12-13 17:20:24 1975 1
转载 epoll学习:思考一种高性能的服务器处理框架
终于开始学习epoll了,虽然不明白的地方还是很多,但从理论到实践,相信自己动手去写一个具体的框架后,一切会清晰很多。1、首先需要一个内存池,目的在于:·减少频繁的分配和释放,提高性能的同时,还能避免内存碎片的问题;·能够存储变长的数据,不要很傻瓜地只能预分配一个最大长度;·基于SLAB算法实现内存池是一个好的思路:分配不同大小的多个块,请求时返回大于请求长度的最小块即可,对于
2011-12-13 15:55:14 1053
转载 Linux中epoll用法小结
epoll是Linux内核为处理大批量句柄而作了改进的poll,是Linux下多路复用IO接口select/poll的增强版本,它能显著减少程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率。一、epoll的优点支持一个进程打开大数目的socket描述符。IO效率不随FD数目增加而线性下降。内核微调。二、epoll的使用epoll有2种工作方
2011-12-13 15:29:58 680
原创 多线程信号学习
1 信号的概念 是向进程发送的软件通知。 信号的生命周期:generate deliver, deliver的含义 deliver的含义:进程接收到信号并采取行动。 挂起的信号的概念 已经generate还没有被deliver的信号.2 信号掩码 的本质 信号掩码是一个信号集,进程要阻塞某些信号可以通过设置信号掩码。 信号阻塞 和信号忽略的
2011-12-13 10:58:19 1001
原创 我郑重的问自己
Q:我现在奋斗的精神动力是什么。A:去找一个适合自己的窝待着。什么样的窝适合自己呢,一个能让自己有拥有归属感和产生自豪感的地方。Q:怎么才有归属感?A:找到一群对编程抱有极大兴趣的人,大家想在一起真正做点事。Q:怎么才能有自豪感?A:做真正的互联网产品,不经意间在家人,朋友的PC,手机上看到自己团队开发的产品,能真切感觉到产品本身对生活的影响,就会产生自豪感。
2011-12-08 22:40:54 747 1
转载 服务器程序设计初探
换工作了后,很久没有来写点什么,总感觉时间不够用。一则工作上的事情比较多;在生活上的时间也比较多。闲话不说,直接谈谈服务器程序的设计的几个部分1。内存分配内存分配对于任何程序都是很重要的,如何分配内存,如何减少频繁的内存分配,如何提高内存的使用效率,减少内存碎片都是需要值得好好研究的问题;对于内存要求比较高的系统,还要考虑内存不够的情况。一般的程序,都会将内存的操作封装成几个函数,一次请求
2011-12-08 22:33:35 836 1
转载 strtok 用法
char * strtok (char * str, const char * delimiters);函数说明C++ strtok()用来将字符串分割成一个个片段。参数str指向欲分割的字符串,参数delimiters则为分割字符串,当strtok()在参数str的字符串中发现到参数delimiters的分割字符时则会将该字符改为'\0'字符。在第一次调用时,strtok()必需给予参数
2011-12-08 16:09:38 566
原创 mysql API
>数据库连接 MYSQL * STDCALL mysql_real_connect(MYSQL *mysql, const char *host, constchar *user, constchar
2011-12-06 17:44:19 581
转载 一个线程死锁问题的分析
客户报过来一个问题,服务器运行一周左右就会停止响应,有时候甚至两天就不响应了,并发用户量并不大,重启服务后又工作正常。每当遇到这种问题时就有点儿棘手。一是这种问题的复现条件不好确定,另一方面,即使确定了条件,对于多线程的服务程序,也不好调试。我遇到过的这种问题,大部分是靠读代码分析出来一个可能的原因列表,然后一一验证,最终找到真正的问题所在。 首先拿到服务运行日志发现没有任何错误消息
2011-12-06 16:15:29 762
转载 STL中map用法
Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候,在编程上提供快速通道。这里说下map内部数据的组织,map内部自建一颗红黑树(一种非严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能,所以在map内部所有的数据都是有序的,后边我们会见识到有
2011-12-05 21:57:15 527
原创 linux线程同步 条件变量使用
à背景知识介绍 1 互斥量 互斥量函数有 pthread_mutex_init 初始化一个互斥量 pthread_mutex_lock 给一个互斥量加锁 pthread_mutex_trylock 加锁,如果失败不阻塞 pthread_mutex_unlock 解锁互斥量从本质上说是一把锁,在访问共享资源前对互斥量进行加锁,在
2011-12-03 08:03:01 1190 1
转载 线程结束资源释放 线程终止
线程创建时,系统会分配给线程一些资源,我们可以看到的就是线程描述符,线程堆栈,在系统内部还会有更复杂的系统维护一些信息,在线程创建时,内核总会为其维护一些资源,比较理想的情况是线程运行结束后,释放系统资源和进程资源,包含线程返回值占用的内存,线程堆栈,寄存器状态等等,以备后来者的使用.线程执行结束后释放资源的三种方法: 利用这些方法,我们可以避免线程退出时,系统资源仍
2011-12-02 16:15:44 10632
原创 sockaddr , in_addr区别
struct sockaddr { unsigned short sa_family; char sa_data[14]; }; 上面是通用的socket地址,具体到Internet socket,用下面的结构,二者可以进行类型转换 s
2011-12-02 10:02:44 1094
原创 INADDR_ANY 与端口复用
Q:struct sockaddr_in my_addr; my_addr.sin_addr.s_addr = INADDR_ANY; 其中INADDR_ANY就是指定地址为0.0.0.0的地址,这个地址事实上表示不确定地址,或“所有地址”、“任意地址” int opt = 1; int len = sizeof(opt);
2011-12-01 17:33:07 1884
转载 C语言之详解#ifdef等宏
有时,希望当满足某条件时对一组语句进行编译,而当条件不满足时则编译另一组语句条件编译命令最常见的形式为: #ifdef 标识符 程序段1 #else 程序段2 #endif它的作用是:当标识符已经被定义过(一般是用#define命令定义),则对程序段1进行编译,否则编译程序段2#include "iostream
2011-12-01 15:50:33 1109
转载 sigaction 点评
函数原型:#include int sigaction(int signo, const struct sigaction *act, struct sigaction *oact);sigaction函数可以读取和修改与指定信号相关联的处理动作。调用成功则返回0,出错则返回-1。signo是指定信号的编号。若act指针非空,则根据act修改该信号的处理动作。若oact指针非空,则
2011-12-01 15:19:41 1097
转载 main 命令行参数举例理解
背景知识:main(int argc,char *argv[ ])argv为指针的指针argc为整数举例:假设程序的名称为prog,在命令行中只输入prog,则由操作系统传来的参数:argc值为1 argv(具体在argv[0]) 中存储输入程序的路径和名称当输入形式为:prog para_1 para_2
2011-12-01 14:17:30 1106
转载 Source Insight 使用小技巧
1、按住"ctrl", 再用鼠标指向某个变量,点击一下,就能进入这个变量的定义。2、今天把一个用sourceinsight排版整齐的C文件,偶然用VC打开一看,全乱了。研究了半天,发现SI对每个字符的宽度不太一致。 请教同事发现选上"view --> draft view", 就可以让每个字符的宽度一致了。快捷键是 "Alt + F12"3、"shift+F8" 标亮所有文本中光标所在
2011-12-01 14:13:41 1620
转载 Source Insight 函数名乱码
函数名不知道为什么显示成一堆不认识的字符。鼓捣了半天也不知道为什么,后来好不容易从网上找来解决方案。唉,太简单了。就是把在代码编辑区把函数名选中,然后右击选则Style Properties(右键菜单很长,慢慢找,是倒数第几个),到里面把字体设置一下就好了。唉,说白了就是字体没选对。
2011-12-01 11:42:40 3233
排序算法实现
2014-07-03
C语言实例解析精粹
2014-07-03
Effective_STL
2014-07-03
网络编程必备 TCP/ IP 详解
2009-11-04
C++Builder.5.编程实例与技巧
2009-05-26
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人