网络编程
文章平均质量分 95
emilio563
弱逼猿
展开
-
接收和发送缓冲区
这两天一直对Linux平台的TCP服务器进行压力测试,发现Linux平台在使用epoll的情况下,发送和接收的速度确实比完成端口的Windows服务器快一点,但消耗内存也大一些;由于没有设置过缓冲区大小,所以怀疑两个平台对socket设置的默认接收和发送缓冲区不同造成的,随后查询了网络上的资料,但对此问题都没有详细描述,只好自己进行了测试。先对Windows平台进行了测试,具体的环境是WinX转载 2015-10-09 18:06:13 · 1262 阅读 · 0 评论 -
HashMap解决hash冲突的方法
源码分析 HashMap 采用一种所谓的“Hash 算法”来决定每个元素的存储位置。当程序执行 map.put(String,Obect)方法 时,系统将调用String的 hashCode() 方法得到其 hashCode 值——每个 Java 对象都有 hashCode() 方法,都可通过该方法获得它的 hashCode 值。得到这个对象的 hashCode 值之后,系统会根据该转载 2016-01-08 11:50:19 · 993 阅读 · 0 评论 -
魔兽争霸3技术分析资源汇总
策划设计讲的是第一代,也很有参考价值。The Making of Warcraft Part 1The Making of Warcraft Part 2The Making of Warcraft Part 3中文版:Patrick Wyatt:魔兽争霸的制作过程 1Patrick Wyatt:魔兽争霸的制作过程 2Patrick Wyatt:魔兽争霸的制作过转载 2015-12-09 16:39:20 · 1770 阅读 · 0 评论 -
关于accept 返回的socket的阻塞属性
测试结果返回的这个socket也是阻塞的,同其他socket默认形式相同。(xp,vs08)recv函数一直卡在那。当手动设置后,即可:newconnection =accept(listeningSocket,(SOCKADDR *)&clientAddr, &len);u_long ulFlag = 1;ioctlsocket(newconnection,FIONBIO,&ul原创 2016-02-05 12:40:35 · 3296 阅读 · 0 评论 -
【C++11】完美转发的使用
原文 http://blog.csdn.net/aqtata/article/details/35372769完美转发(perfect forwarding)问题是指函数模板在向其他函数传递参数时该如何保留该参数的左右值属性的问题。也就是说函数模板在向其他函数传递自身形参时,如果相应实参是左值,它就应该被转发为左值;同样如果相应实参是右值,它就应该被转发为右转载 2016-02-06 15:48:37 · 555 阅读 · 0 评论 -
Google Protocol Buffer 的使用和原理
简介什么是 Google Protocol Buffer? 假如您在网上搜索,应该会得到类似这样的文字介绍:Google Protocol Buffer( 简称 Protobuf) 是 Google 公司内部的混合语言数据标准,目前已经正在使用的有超过 48,162 种报文格式定义和超过 12,183 个 .proto 文件。他们用于 RPC 系统和持续数据存储系统。Pro转载 2016-01-13 11:09:16 · 346 阅读 · 0 评论 -
std:forward 完美转发
概述: // TEMPLATE CLASS identitytemplate struct identity { // map _Ty to type unchanged typedef _Ty type; const _Ty& operator()(const _Ty& _Left) const {转载 2016-02-01 22:58:20 · 344 阅读 · 0 评论 -
asio 使用笔记
系统 centosIDE codeblock1设置IDE: project ------------> build options------------> compile settings-------------->勾上have g++ follow the C++11 ISO C++ language standard [-std=c++11]2 设置IDE:project --原创 2016-02-02 17:18:22 · 343 阅读 · 0 评论 -
core文件来调试segment fault
如何使用core文件来调试segment fault:1.启动ulimit工具,如 ulimit -c 10002. 运行应用程序app3.等待程序出错,通常是在shell上打印kill或者segment fault信息,这时就已经生成了core文件,一般为core.xxx, .xxx是一个数据,对应运行时的线程号。4.执行gdb定位错误位置,如: gdb ./app ./core转载 2016-02-03 17:10:01 · 538 阅读 · 0 评论 -
Linux系统中的异常堆栈跟踪简单实现
转载请说明出处:http://blog.csdn.net/cywosp/article/details/25002201 在Linux中做C/C++开发经常会遇到一些不可预知的问题导致程序崩溃,同时崩溃后也没留下任何代码运行痕迹,因此,堆栈跟踪技术就显得非要重要了。本文将简单介绍Linux中C/C++程序运行时堆栈获取,首先来看backtrace系列函数——使用范围适合于转载 2016-02-18 02:04:02 · 551 阅读 · 0 评论 -
Linux下c/c++开发之程序崩溃(Segment fault)时内核转储文件(core dump)生成设置方法
Linux下c/c++开发之程序崩溃(Segment fault)时内核转储文件(core dump)生成设置方法 Linux下c/c++开发程序崩溃(Segment fault)通常都是指针错误引起的.以下是我们详细的对Linux core dump的调试技术进行的介绍: Linux core dump简介有的程... Linux下c/c++开发之程序崩溃(Segment fault转载 2016-02-18 02:05:11 · 2674 阅读 · 0 评论 -
c++模板类(一)理解编译器的编译模板过程
版权声明:本文为博主原创文章,未经博主允许不得转载。 如何组织编写模板程序 前言常遇到询问使用模板到底是否容易的问题,我的回答是:“模板的使用是容易的,但组织编写却不容易”。看看我们几乎每天都能遇到的模板类吧,如STL, ATL, WTL, 以及Boost的模板类,都能体会到这样的滋味:接口简单,操作复杂。我在5年前开始使用模板,那时我看到了MFC的容器类。直到去年转载 2016-02-22 18:55:14 · 265 阅读 · 0 评论 -
C++运算符重载讲解与经典实例
C++中预定义的运算符的操作对象只能是基本数据类型,实际上,对于很多用户自定义类型,也需要有类似的运算操作。例如: class complex { public: complex(double r=0.0,double I=0.0){real=r;imag=I;} void display(); private: double real; dou转载 2016-02-26 11:21:00 · 458 阅读 · 0 评论 -
c++对象内存模型【内存布局】
#类中的元素0. 成员变量 1. 成员函数 2. 静态成员变量 3. 静态成员函数 4. 虚函数 5. 纯虚函数#影响对象大小的因素0. 成员变量 1. 虚函数表指针(_vftptr) 2. 虚基类表指针(_vbtptr) 3. 内存对齐_vftptr、_vbtptr的初始化由对象的构造函数, 赋值运算符自动完成;对象生命转载 2016-05-12 14:48:31 · 330 阅读 · 0 评论 -
Libevent使用例子,从简单到复杂
转载请注明出处:http://blog.csdn.net/luotuo44/article/details/39670221 本文从简单到复杂,展示如何使用libevent。网上的许多例子都是只有服务器端的,本文里面客户端和服务器端都有,以飨读者。 关于libevent编程时的一些疑问可以阅读《libevent编程疑难解答》。假如转载 2016-11-27 16:19:45 · 378 阅读 · 0 评论 -
centos安装mysql以及mysql++开发环境
1>安装mysql服务器:groupadd mysqluseradd -g mysql mysqlcd /usr/localgunzip ln -s mysql-5.0.41-linux-i686 mysqlcd mysqlchown -R mysql .chgrp -R mysql .scripts/mysql_install_db --user=mysq转载 2016-01-06 13:04:43 · 482 阅读 · 0 评论 -
处理大并发之五 使用libevent利器bufferevent
首先来翻译一段文章 你可能注意到随着我们代码变得越来越高效,程序也变得更加复杂。当我们产生一个进程的时候,我们没有必要为每一个链接管理一个buffer,我们只需要每个处理独立栈分配缓冲区就可以了。在读和写的时候,我们不必明确的跟踪每一个socket,这在我们的代码里是一个暗示,我们没有必要定义一个结构体去跟踪每一个操作什么时候完成,我们只需要使用循环栈变量就可以了。转载 2016-01-06 12:27:16 · 315 阅读 · 0 评论 -
socket的发送与接收缓冲区
应用程序可通过调用send(write, sendmsg等)利用tcp socket向网络发送应用数据,而tcp/ip协议栈再通过网络设备接口把已经组织成struct sk_buff的应用数据(tcp数据报)真正发送到网络上,由于应用程序调用send的速度跟网络介质发送数据的速度存在差异,所以,一部分应用数据被组织成tcp数据报之后,会缓存在tcp socket的发送缓存队列中,等待网络空闲时转载 2015-10-09 20:05:13 · 984 阅读 · 0 评论 -
signal(SIGPIPE, SIG_IGN)
当服务器close一个连接时,若client端接着发数据。根据TCP 协议的规定,会收到一个RST响应,client再往这个服务器发送数据时,系统会发出一个SIGPIPE信号给进程,告诉进程这个连接已经断开了,不要再写了。 根据信号的默认处理规则SIGPIPE信号的默认执行动作是terminate(终止、退出),所以client会退出。若不想客户端退出可以把SIGPIPE设为SIG_IGN转载 2015-10-09 22:07:06 · 460 阅读 · 0 评论 -
linux无锁化编程--__sync_fetch_and_add系列原子操作函数
linux支持的哪些操作是具有原子特性的?知道这些东西是理解和设计无锁化编程算法的基础。下面的东西整理自网络。先感谢大家的分享! __sync_fetch_and_add系列的命令,发现这个系列命令讲的最好的一篇文章,英文好的同学可以直接去看原文。Multithreaded simple data type access and atomic variables__转载 2015-10-10 14:57:23 · 362 阅读 · 0 评论 -
c++ 中__declspec 的用法
c++ 中__declspec 的用法语法说明:__declspec ( extended-decl-modifier-seq )扩展修饰符:1:align(#) 用__declspec(align(#))精确控制用户自定数据的对齐方式 ,#是对齐值。e.g__declspec(align(32)) struct Str1{int转载 2015-10-10 17:18:25 · 314 阅读 · 0 评论 -
Dead Reckoning - 航位推测法
原文地址: http://www.gamasutra.com/view/feature/131638/dead_reckoning_latency_hiding_for_.phpProgrammers who attempt to develop games for network play quickly discover the problems of dealing wi转载 2015-12-09 17:14:47 · 2434 阅读 · 0 评论 -
每个程序员都该知道的网络同步知识
原文地址: http://gafferongames.com/networking-for-game-programmers/what-every-programmer-needs-to-know-about-game-networking/IntroductionYou’re a programmer. Have you ever wondered how multi转载 2015-12-09 17:18:05 · 721 阅读 · 0 评论 -
lua 5.2 GC 源码分析 一
最近一直在看lua5.2的GC。总想写点自己的理解。 今天也看的差不多了,可以开始写了。 此前查阅了官方的一些资料,推荐给大家,下面是网址: http://lua-users.org/wiki/GarbageCollection lua5.2里面有三种回收机制[cpp] view plaincop转载 2015-12-09 16:28:24 · 664 阅读 · 0 评论 -
linux下安装或升级GCC4.8,以支持C++11标准
C++11标准在2011年8月份获得一致通过,这是自1998年后C++语言第一次大修订,对C++语言进行了改进和扩充。随后各编译器厂商都各自实现或部分实现了C++中的特性。如需查看各编译器对C++11的支持程度,请参看文章: 本文主要介绍在Linux系统下,如何升级GCC以支持C++11。目前来看GCC是对C++11支持程度最高最多的编译器,但需要GCC4.8及以上版本。转载 2015-12-09 17:00:07 · 466 阅读 · 0 评论 -
linux网络编程常用头文件
sys/types.h:数据类型定义sys/socket.h:提供socket函数及数据结构netinet/in.h:定义数据结构sockaddr_inarpa/inet.h:提供IP地址转换函数netdb.h:提供设置及获取域名的函数sys/ioctl.h:提供对I/O控制的函数sys/poll.h:提供socket等待测试机制的函数其转载 2015-12-30 18:22:53 · 315 阅读 · 0 评论 -
Linux头文件
头文件主目录include头文件目录中总共有32个.h头文件。其中主目录下有13个,asm子目录中有4个,linux子目录中有10个,sys子目录中有5个。这些头文件各自的功能如下,具体的作用和所包含的信息请参见第14章。:a.out头文件,定义了a.out执行文件格式和一些宏。 :常数符号头文件,目前仅定义了i节点中i_mode字段的各标志位。 :字符类型头文件,定义了一转载 2015-12-30 18:24:45 · 326 阅读 · 0 评论 -
处理大并发之 对libevent的初步认识
首先翻译下http://www.wangafu.net/~nickm/libevent-book/01_intro.html里的一段文章对异步IO的一个简要介绍大多数应用程序都是阻塞的IO调用,如果IO调用是同步(阻塞)的,它不能立即返回直到它的操作完成,或者经过了很长时间直到网络栈丢弃。当你在一个TCP连接上调用”connect()”时,例如,你的操作系统从TCP连接的另一端主机转载 2016-01-06 12:10:34 · 352 阅读 · 0 评论 -
处理大并发之 对libevent的初步认识
首先翻译下http://www.wangafu.net/~nickm/libevent-book/01_intro.html里的一段文章对异步IO的一个简要介绍大多数应用程序都是阻塞的IO调用,如果IO调用是同步(阻塞)的,它不能立即返回直到它的操作完成,或者经过了很长时间直到网络栈丢弃。当你在一个TCP连接上调用”connect()”时,例如,你的操作系统从TCP连接的另一端主机转载 2016-01-06 12:11:25 · 314 阅读 · 0 评论 -
处理大并发之 libevent demo详细分析(对比epoll)
libevent默认情况下是单线程,每个线程有且仅有一个event_base,对应一个struct event_base结构体,以及赋予其上的事件管理器,用来安排托管给它的一系列的事件。当有一个事件发生的时候,event_base会在合适的时间去调用绑定在这个事件上的函数,直到这个函数执行完成,然后在返回安排其他事件。需要注意的是:合适的时间并不是立即。例如:[cp转载 2016-01-06 12:13:26 · 314 阅读 · 0 评论 -
基于事件的开源网络库—libevent:应用介绍
一、简介因memcached(见上一篇“数据缓存系统-memcached介绍”)使用了libevent作为它对外界事件(磁盘、网络等)的监控,所以对libevent就一同进行了了解、应用。按libevent的官网(http://libevent.org/)介绍,libevent是一个监视特定事件,提供回调函数的C++库,它可以监视的事件包括:1. 能以文件描述符表转载 2016-01-06 12:14:52 · 318 阅读 · 0 评论 -
设置Libevent库
Libevent有一些全局的设置共享给所有的程序。他影响整个库。你必须在使用Libevent任一库之前来设置这些变量,否则会导致Libevent状态的不一致。Libevnet的日志消息Libevent可以记录内部的错误和警告。如果编译添加了对日志记录的支持,你也可以记录调试信息。这些信息默认的被输出了标准错误输出。你可以提供自己的日志记录函数来覆盖原来的日志记录的方式。转载 2016-01-06 12:16:26 · 349 阅读 · 0 评论