自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

stpeace的专栏

涛哥不知何许人也,亦不详其姓字。好读书,求甚解。常著文章自娱,颇示己志。忘怀得失,有始有终......

原创 再谈函数指针/回调函数的用途------基础类如何调用主调模块

最近看一个网络库的源码, 其中涉及到TCP的收包, 我们都知道, tcp收包的时候, 要处理好粘包问题, 也就是说, 在网络基础库中, 要判断收包的完整性。 而收包是否完整, 这是由应用程序逻辑来决定的, 此时, 就涉及到基础库调用主调模块呢?         怎么搞起呢? 利用函数指针, 把待...

2017-06-30 23:46:42

阅读数 5464

评论数 0

原创 tcp send函数发送的最大长度可以超过65535字节吗?

在前面的文章中, 我们说过, udp socket中, sendto函数单次发送的最大业务数据是65507字节, 并给出了理论的计算方式。 那么, TCP包同样被IP包包住, 表面上看, 好像是TCP包不能超过65535个字节, 所以send函数不能超过65535个字节, 可实际呢?       ...

2017-06-30 22:18:05

阅读数 12678

评论数 2

原创 udp sendto的数据会分包发送吗?

在前面的文章中, 我们说过, udp的最大业务数据报的大小为65507个字节, 调用send后, 这些数据是一次udp包发送的吗? 来看看: #include #include #include #include #include #include #include #include...

2017-06-30 22:00:52

阅读数 7077

评论数 0

原创 我曾经以为内存泄露就是内存逐渐减少,于是内存逐渐丢失了, 要去买新内存条了。

我是大学毕业后的一段时间, 第一次听说内存泄露的。 当时觉得, 内存泄露好严重啊, 计算机的内存在不断减少, 于是计算机在不断损坏, 要去买新的内存了。           可悲可叹。

2017-06-29 22:58:33

阅读数 5749

评论数 2

原创 正在被执行/打开的文件, 能删除掉么?------linux和Windows不一样

大学的时候, 那时还没电脑, 于是用同学的电脑, 不知怎么搞的, 我弄个让一个文件没法删除, 紧张得不得了。 后来, 同学说, 关机后, 重启就好了。 到后来我才明白, 原来是有进程死死地拽住了这个文件, 所以无法删除。 我相信大家也经常遇到这种问题。          在linux上就不一样了,...

2017-06-29 22:45:18

阅读数 6976

评论数 1

原创 iRet和iRetCode导致的bug

最近代码中混用了iRet和iRetCode,  出现了bug, 大约10多分钟才搞定。         代码风格和编程习惯真不是一句废话。

2017-06-29 22:36:31

阅读数 5632

评论数 0

原创 用实际程序来测试udp sendto函数的最大发包大小------为什么是65507?

我们知道, IP包头有一个16bit的长度, 对应的二进制最大值是2^16 -1,也就是说一个IP包整个长度的最大值是2^16 - 1 字节, 如果考虑UDP通信, 那么除去IP头的20个字节, 除去UDP头的8个字节, 还剩2^16 - 1 - 20 - 8 字节。 我们来玩玩程序(本文只以客户...

2017-06-29 22:16:15

阅读数 7388

评论数 0

原创 关于udp socket recvfrom函数的一个易错问题: 如果应用程序指定的接收长度不够怎么办?

我们来看这样一个问题, 在udp socket变成中, sendto连续三次发送10个字节的数据,

2017-06-29 22:07:24

阅读数 10989

评论数 6

原创 IP包头的两个长度分别是什么意思? TCP包头中的长度又是什么意思?------肉眼解析IP/TCP包

我们来看这样一个IP包: 23:57:05.744655 IP 10.100.70.139.34209 > 10.100.70.139.19006: Flags [P.], seq 1:7, ack 1, win 171, options [nop,nop,TS val 117334068...

2017-06-28 01:04:01

阅读数 10683

评论数 0

原创 用shell来发tcp包

经常用tcpdump抓包来倒腾和学习, 但怎么触发tcp包呢? 写一个客户端程序, 然后朝server上发包, 肯定可以, 但还有更简单的方法: exec 8<>/dev/tcp/10.100.70.139/19006 echo -e "stats" >&a...

2017-06-28 00:02:49

阅读数 8380

评论数 0

原创 tcpdump中的Flags [S.]和Flags [.]是什么意思?------顺便看看三次握手包

我们用telnet发起tcp连接, 建立三次握手, 抓包来看看: xxxxxx$ sudo tcpdump -iany port 19006 -Xnlps0 tcpdump: verbose output suppressed, use -v or -vv for full protocol de...

2017-06-27 23:17:09

阅读数 17865

评论数 9

原创 用tcpdump来抓包和分析IP/TCP的结构

抓包: xxxxxx$ sudo tcpdump -iany port 5432 -Xnlps0 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on any, link-ty...

2017-06-27 22:59:34

阅读数 7246

评论数 0

原创 tcpdump抓的是哪一层的包?

tcpdump很强大, 导致有些同学以为它抓的是物理层面上的二进制流, 其实不然。 它抓的是网络层的数据, 如下: xxxxxx$ sudo tcpdump -iany port 3721 -Xnlps0 tcpdump: verbose output suppressed, use -v or ...

2017-06-27 07:58:35

阅读数 8909

评论数 0

原创 孤儿进程示例分析

父进程创建子进程后, 父进程先挂了, 于是子进程成了孤儿进程, 被新的init进程所领养。         来看代码: #include #include int main() { int pid = 0; pid = fork(); if(pid < 0) { ...

2017-06-27 07:55:37

阅读数 5711

评论数 3

原创 谈谈误解------为什么select支持的fd数量有限制,而poll/epoll等支持的fd数量没有限制?

很多书本和网上都说: poll/epoll比select好的地方之一在于:select支持的最大fd数量有限制,而poll/epoll等支持的最大fd数量没有限制。 这句话本身没有太多问题, 但我纳闷, 一般来说,  单个进程(在一个典型的linux机器上,  比如我的机器就是这样)能打开的最大f...

2017-06-25 17:21:49

阅读数 6685

评论数 0

转载 一起 select 引起的崩溃------core dump

转载地址: http://blog.codingnow.com/2014/02/select_bug.html 2 月 13 日,陌陌争霸 计划在下午 16:00 例行维护,之前已经稳定运行了很长时间了。没想到在 14:30 左右,有一台从机意外崩溃。再次之前,从机崩溃并不会引起系统坏死,...

2017-06-25 17:00:13

阅读数 6127

评论数 2

转载 我用select做多路复用踩到的坑------core dump

转载地址: http://blog.csdn.net/haust_wang/article/details/50995644 既然说是用select踩到的坑,那么就先直接贴一段使用select的代码上来瞅一下: [cpp] view plain copy   bool So...

2017-06-25 16:58:16

阅读数 5746

评论数 0

原创 select的fd超过1024将会非常危险------select导致core dump (句柄增多/句柄泄露引起)

在一般系统上, 进程打开的句柄数目是1024, 但在有的系统上, 却不是这个数, 举个栗子: yyyyyy$ ulimit -n 100001       下面,我们来看看程序: #include #include #include #include #include ...

2017-06-25 16:52:09

阅读数 6741

评论数 2

原创 用linux命令和程序实际测试一下单进程能打开的最大的句柄数(也可以说是文件数)------并不一定是1024/2048哈

本文中, 我们继续来做小实验, 看看linux单进程能打开的最大的句柄数(其实也是文件数, 因为linux下一切皆文件嘛),  命令如下: xxxxxx:~/network> ulimit -a core file size (blocks, -c) unlimited d...

2017-06-25 15:50:10

阅读数 6996

评论数 0

原创 select的fd超过1024将会非常危险------FD_SET导致core dump

关于linux select无须多说, 来看代码: #include #include #include #include #include #include int main(int argc, char *argv[]) { if(argc != 2) { printf("...

2017-06-25 15:20:03

阅读数 8223

评论数 0

转载 Linux select 文件描述符1024限制------此处容易导致core dump

转载地址: http://blog.csdn.net/sxtobj/article/details/53170782 最近系统出现宕机的情况,分析core文件,所有的线程都在select处。 最后怀疑是文件描述符超过了1024。但是想到Apache也是采用select的io模型。所以还是很不...

2017-06-25 12:58:45

阅读数 6630

评论数 0

原创 tcp粘包和nagle算法

在前面的文章中, 我们讨论过tcp粘包问题, 当时考虑的场景是, 如果接收端来不及接受, 那么就会造成粘包, 事实上, 这是tcp粘包的一个原因之一, 这是接收端的粘包。 实际上, 粘包还可能发生在发送端。          接收端的粘包, 基本可以认为是应用程序没有及时读取所造成的。 而发送端的...

2017-06-25 11:54:57

阅读数 6686

评论数 0

原创 再谈tcp流式传输和udp数据报传输------大家顺便来做做这两个题目!

我的书算是白读了, 这个问题居然是我在工作后才明白的。 我不能怪老师没有讲清楚, 我只能认为自己没有好好学习。 计算机网络这门课, 真是个枯燥无比的东西, 至少我是这么觉得的。 当年在大学时, 貌似是选修课, 全部靠背诵一些无聊又无耻的东西, 最后何老师给我打了60分, 算是一...

2017-06-25 10:49:05

阅读数 9380

评论数 6

原创 一起来玩linux udp通信程序

         在之前的博文中, 我玩过Windows下的udp, 而linux下的udp也类似, 而且, 相比较tcp而言, 我发现我越来越喜欢udp了。话不多说, 直接上菜:         服务端程序为:#include &lt;stdio.h&gt; #include &...

2017-06-25 10:09:33

阅读数 6456

评论数 0

原创 我所经历过的tcp“粘包”及其处理

刚毕业参加工作的时候, 我对计算机网络和网络编程一无所知。 当时要负责一个客户端界面软件的维护和开发, 而另一个“同事”要离职, 哎, 扯远了。          我当时在代码中读到一个注释, 其中有“粘包”二字, 当时比较纳闷: 不都说tcp是好东西吗? 怎么会粘包呢? 可见, 我确实对网络一无...

2017-06-25 00:29:10

阅读数 5832

评论数 0

原创 今天搞清楚了一年半前的那次网络收包错误原因

大约在一年半前, 也就是2005年圣诞的时候, 做了一个圣诞活动的需求。 当时, 我要给后台某服务发送一个通知, 实际上就是一个写请求。 在调试和上线阶段, 鞋操作都是OK的, 而且对方那边收到的收包和回包完全正常, 但是, 我接到对方的回包后, 发现解包错误, 怪哉。         当时时间...

2017-06-24 23:51:16

阅读数 6331

评论数 2

原创 后台服务的系统错误和逻辑错误不同

后台服务的系统错误和逻辑错误不同, 怎么说呢?          算了, 不说了, 需要自己好好体会。

2017-06-24 20:03:52

阅读数 5720

评论数 0

转载 socket阻塞与非阻塞,同步与异步、I/O模型------非常值得一看!

转载地址: http://blog.csdn.net/hguisu/article/details/7453390/                                                           socket阻塞与非阻塞,同步与异步 作者...

2017-06-24 19:29:57

阅读数 5883

评论数 0

原创 初玩linux epoll------一个服务器如何与多个客户端进行通信? (笔试面试常考)

select和poll被鄙视得厉害, 因为有了linux epoll的存在。 网上讲解select/poll/epoll的例子不胜枚举, 各种比喻, 各种图示。 其实, epoll并没有那么玄乎。 本文中, 我们不进行画图讲解, 也尽量避免过多的文字描述, 只是初步来感受一下epoll.     ...

2017-06-24 17:41:41

阅读数 6974

评论数 2

原创 基于linux poll模型的tcp服务器------一个服务器如何与多个客户端进行通信?

        在之前的博文中, 我们一起玩了Windows下的select函数, 实现了一个服务器与多个客户端进行通信。 如果一直到linux, 那几乎是大同小异的。 现在, 我们不说select, 而来接续说说linux poll.        在前面的博文中, 我们也介绍了linux po...

2017-06-24 16:06:39

阅读数 7258

评论数 2

原创 玩下linux中的的poll函数------可以用任何描述符号fd而不限于网络socket

前面我们玩了linux中的select函数, 今天我们来介绍一个与之类似的函数, 作用就是做轮询检测, 建议先看select,  再看poll.  至于函数原型和返回值, 就没有必要单独说了, 网上一搜一大堆。        直接上菜: #include #include #include ...

2017-06-24 14:40:33

阅读数 5939

评论数 4

原创 tcp超时重传(RTO)之karn算法及其简要实验

我们都知道, tcp是面向连接的可靠传输, 其中的超时重传是可靠性保证之一。 好了, 不扯那么多理论了, 本来来玩一个简要的实验。         前面说过了, telnet ip port命令是在向ip, port发起tcp连接, 假如这个ip, port不存在, 那么客户端自然连接不上, 那么...

2017-06-24 10:25:36

阅读数 7109

评论数 0

原创 linux alarm函数简介

上代码: #include #include #include #include int main(int argc, char *argv[]) { alarm(5); sleep(20); printf("end!\n"); return 0; ...

2017-06-24 10:01:17

阅读数 6872

评论数 0

原创 nm命令的-C参数

之前说过,nm命令中的结果符号, 是人不可读的, 这主要是因为C++的name mangling机制造成的, 但可以用c++filt进行转化为人为可读的。          实际上, 在nm中加上-C参数, 就可以直接展示为人可读的, 爽爽哒, 这点经常会用到。

2017-06-24 09:26:43

阅读数 6614

评论数 0

原创 为什么linux select函数的第一个参数总应该是fdmax + 1 ?------poll和epoll不需要+1

       先说明一下, 在Windows中, 并不要求select函数的第一个参数总应该是fdmax + 1(在Windows下, 给定-1就行), 那linux中为什么又是呢?        这就涉及到linux select第一个参数的函数: 待测试的描述集的总个数。 但要注意, 待测试...

2017-06-23 08:28:31

阅读数 8434

评论数 0

原创 再次一起来玩linux select函数------可以用任何描述符号fd而不限于网络socket

在之前的网络编程中, 我们经常提到select函数, Windows select和linux select大同小异, 下面, 我们来玩玩linux select, 直接上菜: #include #include #include #include #include #include int m...

2017-06-22 23:56:49

阅读数 6179

评论数 0

原创 linux中的 STDIN_FILENO,STDOUT_FILENO和STDERR_FILENO

直接上菜: #include #include #include #include // unistd.h中的一段代码: // #define STDIN_FILENO 0 /* Standard input. */ // #define STDOUT_FILENO ...

2017-06-22 23:47:28

阅读数 7231

评论数 0

原创 将日志配置文件的error级别改为debug级别, cpu瞬间飙升!

不久前, 为了查问题, 就把日志配置文件的error级别临时改为debug级别, 顺便观察到一个现象: cpu使用率瞬间飙升。 当我改回道error级别后, cpu就降下来了。         这里要注意两个问题:         1.  狂刷log的debug级别, 如果放到外网上跑, 会影响服...

2017-06-22 23:41:05

阅读数 7727

评论数 0

转载 Linux网络编程--recv函数返回值详解

转载地址: http://www.cnblogs.com/Genesis-007/p/5190552.html                  说明: 文中红色部分是我的备注 函数原型: 1 ssize_t recv(int sockfd, void *buf,...

2017-06-22 00:15:41

阅读数 6597

评论数 0

转载 linux send与recv函数详解------内附代码

转载地址: http://blog.csdn.net/sjin_1314/article/details/9565743        [csharp] view plain copy  print? 1 #include    2 ssize_t recv(int sockf...

2017-06-22 00:11:27

阅读数 13240

评论数 0

提示
确定要删除当前文章?
取消 删除