stpeace的专栏

接纳自己,提升认知,拥抱不确定性。

排序:
默认
按更新时间
按访问量

很多人居然以为select/poll/epoll是用来实现后台服务并发的?

     网上资料,很多都是以讹传讹,到处复制粘贴,不可尽信。 我们需要有自己的判断。          来说说后台服务模型:      1.  迭代服务器        简单说,就是在while中循环accept, 然后处理。显然, 这种服务是没有并发功能的, 后一个请求必须等前一个请求...

2018-07-07 15:02:26

阅读数:1702

评论数:2

吃饭前写个linux select/poll/epoll代码示例玩玩

      等朋友吃饭,还有1个小时, 写个select, poll, epoll程序玩玩:include <stdio.h> #include <unistd.h> #include <...

2018-03-31 16:14:21

阅读数:2356

评论数:2

最近实际用了一下recvfrom和sendto,感觉不错

       有个需要快速搞起的需求, 选用udp, 实际用了一下recvfrom和sendto,  不用担心粘包, 感觉不错, 顺便看看原型:ssize_t sendto(int sockfd, const void *buf, size_t len, int flags, ...

2018-03-09 20:55:47

阅读数:2264

评论数:0

测试udp的丢包和乱序

      udp服务端代码:#include <stdio.h> #include <stdlib.h> #include <string.h> #include ...

2018-03-09 20:54:46

阅读数:2661

评论数:0

udp服务雪崩测试与分析

       我们知道, udp socket的接收缓冲区大小是有限的, 可以查到最大值。 以server端为例, 如果server端socket接收缓冲区满了, 那么client端新进的请求不会得到及时处理, 出现丢包。 即使server端的socket的接收缓冲区没有满, 但仍有一些请求在其中...

2018-03-09 20:51:39

阅读数:2280

评论数:0

带超时时间的sendto和recvfrom(用SO_SNDTIMEO和SO_RCVTIMEO搞起)

       在udp中, 可以用SO_SNDTIMEO和SO_RCVTIMEO来实现发送、接收的超时设置, 下面以SO_RCVTIMEO为例来看看:#include <stdio.h> #include <stdlib.h&...

2018-03-07 22:24:50

阅读数:2387

评论数:0

为什么执行ping命令时不需要root权限? 怎样让进程具有root权限?

     最近遇到一个问题, 需要让普通用户执行程序时具有root权限, 怎么办呢?     我们来看看ping, 它采用了raw socket, 需要root权限, 但是, 我们平常执行root命令的时候, 没有加sudo啊, 来探个究竟:ubuntu@VM-0-15-ubuntu:~/taog...

2018-03-02 23:09:33

阅读数:2365

评论数:0

用raw socket接收udp数据的C/C++代码实战

       最近要用到raw socket, 来看下。server.cpp:#include <stdio.h> #include <string.h> #include <unistd...

2018-03-02 23:05:59

阅读数:2310

评论数:0

tcp 80和443端口探测代码

以前写过, 最近要用, 来整合一下, 方便后续用: #include #include #include #include #include #include #include #include #include #include #include #include #i...

2018-01-30 12:03:26

阅读数:4239

评论数:0

TCP全连接队列和半连接队列已满之后的连接建立过程抓包分析

转载地址:https://www.cnblogs.com/menghuanbiao/p/5212131.html 最近项目需要做单机100万长连接与高并发的服务器,我们开发完服务器以后,通过自己搭的高速压测框架压测服务端的时候,发生了奇怪的现象,就是服务端莫名其妙的少接收了连接,...

2018-01-29 21:36:21

阅读数:3987

评论数:0

浅谈UDP(数据包长度,收包能力,丢包及进程结构选择)------很好

转载地址:https://www.cnblogs.com/linuxbug/p/4906000.html UDP数据包长度 UDP数据包的理论长度 udp数据包的理论长度是多少,合适的udp数据包应该是多少呢?从TCP-IP详解卷一第11章的udp数据包的包头可以看出,udp...

2018-01-29 21:32:42

阅读数:4125

评论数:0

带超时时间的telnet该怎么玩?------检测tcp是否可连接时经常用到(本文仅给出linux版本,之前博客也有Windows版本的)

前面说过, 利用ping命令探测网络是否可通, 但很多时候, 服务端或者防火墙禁止了ping命令, 也就是说, ping不通, 不表示网络不通, 所以仍有可能能建立tcp连接。怎么检测tcp连接是否可通呢? 用telnet命令就可以搞起, 但问题是, 很多时候(尤其是批量探测的时候), 我们需要给...

2017-12-18 19:52:37

阅读数:5216

评论数:0

用C/C++代码检测ip能否ping通(配合awk和system可以做到批量检测)

遇到一个小需求, 快速搞定。 来看看用C/C++代码检测ip能否ping通: #include #include #include #include #include using namespace std; string getCmdResult(const string &...

2017-12-15 12:36:28

阅读数:4700

评论数:0

从string引起的串扰bug说起

最近遇到一个低概率问题, 具体问题就不详细说了, 只简要说说: 拉取某接口失败(低概率), 做重复拉取一次的动作, 第二次成功, 但后台给客户端返回的值始终不对, 花了一番功夫, 才查出原因。 这个问题非常隐蔽, 来看看: #include #include #include "cu...

2017-10-23 21:01:08

阅读数:4462

评论数:0

libcurl获取网页内容的C/C++代码

我们之前用socket API写过访问百度服务的程序, 今天我们用libcurl来写写。 实际上后者是对前者的封装。 代码如下(注意:你要包含curl.h文件, 并在makefile中加入对应的静态库, 否则编译不过):

2017-09-14 20:03:23

阅读数:5828

评论数:0

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

      之前玩过epoll,  再来看下, 其实也很简单:#include <unistd.h> #include <sys/types.h> #include <sys/socket...

2017-09-03 15:30:43

阅读数:4789

评论数:0

最近又遇到一个RST, 一眼就看出来了!

最近又遇到一个RST问题,  一眼就看出来了!         问题是这样的, 客户端send后, 两次recv数据, 结果, 我用的是工程封装的RECV函数(考虑了超时), 它会在每次RECV后自动close socket.  结果我二次调用RECV的时候, 总是出现错误。 看了一下网络包, 发...

2017-08-05 10:32:51

阅读数:4540

评论数:2

linux accept函数与三次握手没有半毛钱的关系------三次握手可能发生在调用accept函数之前

想必大家对tcp三次握手已经乱熟于心了, 在很多地方, 描述三次握手的时候, 总把accept函数扯进去, 其实三次握手和accept函数没有半毛钱的关系。 在Linux中, accept函数的作用是: 从已经完成连接的socket队列中取出一个socket, 如果没有已经完成连接的socke...

2017-07-26 23:34:57

阅读数:4630

评论数:0

linux fork多进程并发服务器模型之C/C++代码实战

在很早的文章中, 我们一起聊过服务器如何与多个客户端进行通信, 那时, 我们要么用select, 要么用多线程, 却没有用多进程。 其实, 多进程也可以实现与多个客户端进行通信。 如果是在while中循环accept, 然后循环处理事情, 此时, 这种服务是迭代服务, 只能逐一...

2017-07-23 20:16:13

阅读数:4988

评论数:6

readn和writen函数一览------顺便说说recv函数的MSG_WAITALL参数

我博客中很少只给出某些代码的片段, 基本都是能够直接运行的完整代码, 本文我们只给片段(很简单), 下面来看看: ssize_t readn(int fd, void *buf, int n) { size_t nleft = n; // left的意思是“剩下”, 而非“左边” char...

2017-07-22 10:25:41

阅读数:5253

评论数:2

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