
15 网络编程晋升
文章平均质量分 87
网络编程晋升
隨意的風
从事10+年的技术开发,结交天下软件研发朋友,共同探讨技术、共同进步。
展开
-
WINDOW socket 错误码
WSAEINTR (10004)翻译: 中断函数调用。 说明: WSACancelBlockingCall (Wsapiref_704y.asp) 对的调用阻止操作被中断。WSAEACCES (10013)翻译: 拒绝访问。 说明: 一个尝试访问套接字被禁止其访问权限的方式。例如,用于发送到广播的地址但广播的权限未设置通过使用 setsockopt(SO_BROADCAST) 时,将发生此错误。另一个可能导致 WSAEACCES 错误的原因是,当函数绑定 (Wsapiref_6vzm.asp)原创 2021-02-04 09:19:37 · 3229 阅读 · 0 评论 -
poll函数讲解***events revents
poll提供的功能与select类似,不过在处理流设备时,它能够提供额外的信息。 #include <poll.h> int poll(struct pollfd fd[], nfds_t nfds, int timeout); 参数: 1)第一个参数:一个结构数组,struct pollfd结构如下: struct pollfd{ int f...原创 2019-12-26 21:29:59 · 4956 阅读 · 4 评论 -
Linux下Socket通信中非阻塞connect、select、recv 和 recvfrom、send和sendto大致讲解,附带非租塞connect代码、MSG_NOSIGNAL
linux中send函数MSG_NOSIGNAL异常消息在服务器端用ctrl+c 来结束服务器接收进程来模拟服务器宕机的情况,结束服务 socket 进程之后,服务端自然关闭进程,可是 client 端也竟然出乎意料的关闭掉。更改发送函数 write 为 send 并添加 MSG_NOSIGNAL 标志,重新编译,运行,中断 server,这个问题被很潇洒的解决Linux 下当网络连接...原创 2019-07-03 20:33:30 · 7169 阅读 · 0 评论 -
linux系统中socket错误码:EINTR和EAGAIN的处理
目录人为重启被中断的系统调用安装信号时设置 SA_RESTART属性忽略信号永远阻塞的系统调用,被信号中断,导致其不继续等待,转而去执行signal_handler1、什么是慢系统调用?该术语适用于那些可能永远阻塞的系统调用。永远阻塞的系统调用是指调用永远无法返回,多数网络支持函数都属于这一类。如:若没有客户连接到服务器上,那么服务器的accept调用就会永远阻塞。...原创 2019-07-03 14:15:40 · 10419 阅读 · 0 评论 -
系统信号(SIGHUP ,SIGPIPE,SIGURG)
对于信号的介绍,我再前面的一篇博客中做过专门的总结,感兴趣的可以看看。本文主要介绍在网络编程中几个密切相关的函数:SIGUP,SIGPIPE,SIGURG。SIGHUP信号 在介绍SIGHUP信号之前,先来了解两个概念:进程组和会话。进程组 进程组就是一系列相互关联的进程集合,系统中的每一个进程也必须从属于某一个进程组;每个进程组中都会有一个唯一的 ID(process gro...原创 2019-06-21 16:44:43 · 1463 阅读 · 0 评论 -
TCP的握手(三次、同时)与挥手(四次、同时)理解
====================================================||欢迎讨论技术的可以相互加微信:windgs (请备注csdn+xx职业)====================================================||TCP详细的内部字节结构 序列号seq:占4个字节,用来标记数据段的顺序,TCP把连接...原创 2019-01-19 12:06:28 · 1675 阅读 · 0 评论 -
linux socket网络编程之SO_REUSEPORT
1、前言 昨天总结了一下Linux下网络编程“惊群”现象,给出Nginx处理惊群的方法,使用互斥锁。为例发挥多核的优势,目前常见的网络编程模型就是多进程或多线程,根据accpet的位置,分为如下场景: (1)单进程或线程创建socket,并进行listen和accept,接收到连接后创建进程和线程处理连接 (2)单进程或线程创建socket,并进行listen,预先创建好多个工作进程或线程accept()在同一个服务器套接字、 这两种模型解...原创 2021-02-02 17:48:43 · 819 阅读 · 0 评论 -
网络编程TCP-IP点分地址转换问题vs2013编辑错误
报错:error C4996: ‘inet_addr’: Use inet_pton() or InetPton() instead or define _WINSOCK_DEPRECATED_NO_WARNINGS to disable deprecated API warningsinet_pton是一个IP地址转换函数,可以在将IP地址在“点分十进制”和“二进制整数”之间转换而且,inet_pton和inet_ntop这2个函数能够处理ipv4和ipv6。算是比较新的函数了。头文件:win原创 2020-12-10 20:19:07 · 275 阅读 · 0 评论 -
linux系统之 组播实例代码(多播 、IP_ADD_MEMBERSHIP 、IP_MULTICAST_IF)
11.3 多播单播用于两个主机之间的端对端通信,广播用于一个主机对整个局域网上所有主机上的数据通信。单播和广播是两个极端,要么对一个主机进行通信,要么对整个局域网上的主机进行通信。实际情况下,经常需要对一组特定的主机进行通信,而不是整个局域网上的所有主机,这就是多播的用途。11.3.1 多播的概念多播,也称为"组播",将网络中同一业务类型主机进行了逻辑上的分组,进行数据收发的时候其数据仅仅在同一分组中进行,其他的主机没有加入此分组不能收发对应的 数据。在广域网上广播的时候,...原创 2020-11-19 11:48:55 · 4205 阅读 · 1 评论 -
网络编程之非阻塞IO 和阻塞IO、IO模式设置、MSG_WAITALL 参数
非阻塞IO 和阻塞IO:在网络编程中对于一个网络句柄会遇到阻塞IO 和非阻塞IO 的概念, 这里对于这两种socket 先做一下说明:基本概念:阻塞IO::socket 的阻塞模式意味着必须要做完IO 操作(包括错误)才会 返回。非阻塞IO:: 非阻塞模式下无论操作是否完成都会立...原创 2020-09-09 14:26:18 · 603 阅读 · 0 评论 -
网络编程之socket阻塞与非阻塞、同步与异步、Linux下的五种I/O模型
概念理解 在进行网络编程时,我们常常见到同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)四种调用方式:同步/异步主要针对C端: 同步: 所谓同步,就是在c端发出一个功能调用时,在没有得到结果之前,该调用就不返回。也就是必须一件一件事做,等前一件做完了才能做下一件事。例如普通B/S模式(同步):提交请求->等待服务器处理->处理完毕返回这个期间客户端浏览器不能干任何事异步: 异步的概念和同步相...原创 2020-09-09 14:22:59 · 649 阅读 · 0 评论 -
Epoll水平触发(Level Triggered)工作模式和边缘触发(Edge Triggered)工作模式区别
目录在linux的IO多路复用中有水平触发,边缘触发两种模式LT模式(默认方式)水平触发图例ET模式总结:epoll 水平触发代码:epoll 边缘触发代码这两种模式的区别如下:水平触发:边缘触发:写过单片机的人可以从另一方理解水平触发和边缘触发的区别:水平触发:边缘触发:大家可能还不能完全了解这两种模式的区别,我们可以举例说明:在linux的IO多路复用中有水平触发,边缘触发两种模式LT模式(默认方式)LT模式即Level Trig.原创 2020-07-09 10:24:12 · 2664 阅读 · 0 评论 -
IP-TCP-UDP报文格式
IP报文格式TCP报文格式源端口(Source port)和目的端口(Destination port)各16 bits。IP地址标识互联网中的不同终端,端口号标识终端中的不同应用进程,具有本地意义。32位IP + 16位端口号 = 48位插口。端口由互联网数字分配机构(Internet Assigned Numbers Authority,IANA)分配,TCP和UDP端口...原创 2020-02-27 12:51:19 · 698 阅读 · 0 评论 -
Epoll详解及源码分析----内核讲解
epoll用法回顾先简单回顾下如何使用C库封装的3个epoll相关的系统调用。更详细的用法参见http://www.cnblogs.com/apprentice89/archive/2013/05/06/3063039.htmlint epoll_create(int size);int epoll_ctl(int epfd, int op, int fd, struct epoll_...原创 2018-07-27 17:50:01 · 407 阅读 · 0 评论 -
epoll 事件的检测
epoll 事件的检测1.。。epoll 事件中发现就EPOLLIN , EPOLLOUT , EPOLLPRI可以用.EPOLLERR 和 EPOLLHUP什么情况下才能监测出这种问题啊.我的内核是2.6.20可是用EPOLLRDHUP的时候编译包错.RecvMessThread.cpp:48: error: ‘EPOLLRDHUP’ was not declared in ...原创 2018-07-27 13:46:20 · 745 阅读 · 0 评论 -
SO_RCVBUF SO_SNDBUF***
SO_RCVBUF SO_SNDBUF先明确一个概念:每个TCPsocket在内核中都有一个发送缓冲区和一个接收缓冲区,TCP的全双工的工作模式以及TCP的滑动窗口便是依赖于这两个独立的buffer以及此buffer的填充状态。接收缓冲区把数据缓存入内核,应用进程一直没有调用read进行读取的话,此数据会一直缓存在相应socket的接收缓冲区内。再啰嗦一点,不管进程是否读取socket,对端...原创 2020-01-16 15:16:09 · 501 阅读 · 0 评论 -
KCP协议 详解***
云真机已经支持手机端的画面投影。云真机实时操作,对延迟的要求比远程视频对话的要求更高(100ms以内)。在无线网络下,如何更实时、更可靠的传输视频流就成了一个挑战。通过websocket、RTMP(Real Time Messaging Protocol(实时消息传输协议))、UDP的比较,最后选择了可靠的UDP协议KCP来进行实时音视频的传输。1 简介KCP是一个快速可...原创 2019-03-22 17:42:50 · 6793 阅读 · 0 评论 -
Source 引擎网络通信原理
基于Source引擎的多人联机游戏使用主从式(客户端-服务器)网络构架。服务器通常指运行游戏的专用主机,客户端指连接到服务器的玩家电脑。客户端与服务器之前通过发送数据包(又称封包)来通信(频率很高,通常每秒20-30个封包)。客户端从服务器接收到当前“世界”的状态后,据这些数据来创建视频和音频输出。客户端同样也从输入设备(键盘、鼠...原创 2018-11-02 20:20:44 · 3160 阅读 · 0 评论 -
Linux下的socket编程实践(七) I/O多路复用技术之select模型
在进入今天的select模型的主题之前,我们先来简单了解一下五种I/O模型:(1)阻塞I/O(默认采用这种方式)在服务端socket编程中,我们常见的accpet函数、recv函数都是采取的阻塞形式。以recv为例: 当上层应用App调用recv系统调用时,如果对等方没有发送数据(Linux内核缓冲区中没有数据),上层应用Application1将阻塞;当对等方发送了数据,Linu转载 2018-01-22 17:16:36 · 248 阅读 · 0 评论 -
Linux下的socket编程实践(八) Select的限制和poll(并发的初步知识)
select的限制用select实现的并发服务器,能达到的并发数一般受两方面限制:1)一个进程能打开的最大文件描述符限制。这可以通过调整内核参数来改变。可以通过ulimit -n(number)来调整或者使用setrlimit函数设置(需要root权限),但一个系统所能打开的最大数也是有限的,跟内存大小有关,可以通过cat /proc/sys/fs/file-max 查看。原创 2018-01-22 17:17:07 · 319 阅读 · 0 评论 -
Linux下的socket编程实践(九) epoll实现高并发的原理及其使用
在 linux 没有实现 epoll 事件驱动机制之前,我们一般选择用 selec t或者 poll 等IO多路复用的方法来实现并发服务程序(详见此链接)。在大数据、高并发、集群等一些名词唱得火热之年代,select 和 poll的用武之地越来越有限,风头已经被 epoll 占尽。 本文便来介绍 epoll 的实现机制,并通过对比其不同的实现机制,真正理解为何 epoll 能实现高并发原创 2018-01-22 17:17:41 · 371 阅读 · 0 评论 -
Linux网络编程--epoll 模型原理详解以及实例
标签: 网络编程epollI-O多路复用epoll-waitepoll-ctl2015-10-08 16:53 5691人阅读 评论(2) 收藏 举报 分类:Linux高性能网络编程(32) 版权声明:【博主微信公众号:不忘初心的行者】【本文为博主原创,未经博主允许不得转载】目录(?)[+]1.简介转载 2018-02-02 16:11:54 · 303 阅读 · 0 评论 -
Linux网络通信编程(套接字模型TCP\UDP与IO多路复用模型select\poll\epoll)
转载 2015年01月17日 00:29:562356Linux下测试代码:TCP模型 1 //TCPClient.c 2 #includestring.h> 3 #includein.h> 4 #include 5 #include 6 #include 7 #define MYPORT 4000 8 #define BA转载 2018-01-26 20:06:00 · 480 阅读 · 0 评论 -
高级I/O复用技术:Epoll的使用及一个完整的C实例
高性能的网络服务器需要同时并发处理大量的客户端,而采用以前的那种对每个连接使用一个分开的线程或进程方法效率不高,因为处理大量客户端的时候,资源的使用及进程上下文的切换将会影响服务器的性能。一个可替代的方法是在一个单一的线程中使用非阻塞的I/O(non-blocking I/O)。 这篇文章主要介绍linux下的epoll(7)方法,其有着良好的就绪事件通知机制。我们将...原创 2018-03-06 15:07:20 · 280 阅读 · 0 评论 -
Linux下Socket通信中非阻塞connect的注意事项
最近在弄Linux下的网络编程,用到了socket通信。在网上查了一些资料,自己也看了一下《Unix网络编程》相关章节。对于编程过程中遇到的一些问题,希望通过本文表达出来。我觉得最让我印象深刻的就是非阻塞的connect的一些使用注意事项了,鉴于自己的文采不是很好,就在网上查找相关的资料,怎料nphyez博主的一篇文章http://blog.youkuaiyun.com/nphyez/artic...原创 2018-06-05 10:33:45 · 995 阅读 · 0 评论 -
linux-socket connect阻塞和非阻塞模式 示例
~/cpp$ ./connect 192.168.1.234 1234 kkkkblock mode: ubuntu 14.04 : time used:21.0.001053sconnect 超时时间是大约21秒!注意:如果connect 127.x.x.x xxx kkkk 会立即返回因为127开头的是网卡自身,你可以ping一下,发现都是通的,且等同于127.0.0.112345678...原创 2018-06-05 13:18:03 · 389 阅读 · 0 评论 -
linux下Intel TBB、 Open MPI、OpenMP
多核编程 简单来说,由于现在电脑CPU一般都有两个核,4核与8核的CPU也逐渐走入了寻常百姓家,传统的单线程编程方式难以发挥多核CPU的强大功能,于是多核编程应运而生。按照我的理解,多核编程可以认为是对多线程编程做了一定程度的抽象,提供一些简单的API,使得用户不必花费太多精力来了解多线程的底层知识,从而提高编程效率。这两天关注的多核编程的工具包括OpenMP和TBB。按照目前网上...原创 2018-06-13 10:59:22 · 3721 阅读 · 0 评论 -
OpenMP设置线程数及开启方法
1. OpenMP线程数设置 通常我们希望并行线程数可以随着机器改变自适应的调整,网上介绍OpenMP的文章很多,但是很少提到该怎么分配线程数,一般来说线程数最大可以开到2*核心数,但是这样电脑计算资源就会被占用的过多,其他程序基本上会卡的不要不要的,所以我一般就设置线程为2*核心数-1。(1) 查看核心数: 上面是我电脑...原创 2018-06-13 11:01:29 · 21752 阅读 · 0 评论 -
OpenMP中几个容易混淆的函数(线程数量/线程ID/线程最大数)以及并行区域线程数量的确定
说明:这部分内容比较基础,主要是分析几个容易混淆的OpenMP函数,加以理解。(1)并行区域数量的确定:在这里,先回顾一下OpenMP的parallel并行区域线程数量的确定,对于一个并行区域,有一个team的线程去执行,那么该分配多少个线程去执行呢?OpenMP的遇到parallel指令后创建的线程team的数量由如下过程决定:1. if子句的结果2. num_threads的设置3. omp_...原创 2018-06-13 11:04:36 · 5066 阅读 · 0 评论 -
信号量函数(semget、semop、semctl)及其范例
信号量函数由semget、semop、semctl三个函数组成。下面的表格列出了这三个函数的函数原型及具体说明。1. semget函数原型 semget(得到一个信号量集标识符或创建一个信号量集对象) 所需头文件 #include <sys/types.h> #include <sys/ipc.h> ...原创 2018-07-18 13:13:57 · 761 阅读 · 0 评论 -
多个进程绑定相同端口的实现分析[Google Patch]
Google REUSEPORT 新特性,支持多个进程或者线程绑定到相同的 IP 和端口,以提高 server 的性能。 1. 设计思路 该特性实现了 IPv4/IPv6 下 TCP/UDP 协议的支持, 已经集成到 kernel 3.9 中。核心的实现主要有三点:扩展 socket option,增加 SO_REUSEPORT 选项,用来设置 reuseport。 修改...原创 2018-08-14 14:33:36 · 1448 阅读 · 0 评论 -
多个进程监听同一个端口(multiple processes listen on same port)
单个进程监听多个端口单个进程创建多个 socket 绑定不同的端口,TCP, UDP 都行 方式1:通过 fork 创建子进程的方式可以实现,其他情况下不行。当连接到来时,子进程、父进程都可以 accept, 这就是著名的“惊群”问题(thundering herd problem)。NGINX 的 master/work 处理方法:Flow of an NGINX wor...原创 2018-08-30 09:18:35 · 2968 阅读 · 0 评论 -
CLOSE_WAIT状态的原因与解决方法
这个问题之前没有怎么留意过,是最近在面试过程中遇到的一个问题,面了两家公司,两家公司竟然都面到到了这个问题,不得不使我开始关注这个问题。说起CLOSE_WAIT状态,如果不知道的话,还是先瞧一下TCP的状态转移图吧。关闭socket分为主动关闭(Active closure)和被动关闭(Passive closure)两种情况。前者是指有本地主机主动发起的关闭;而后者则是指本地主机检...原创 2018-10-29 21:33:28 · 2467 阅读 · 0 评论 -
浅谈网络I/O多路复用模型 select & poll & epoll
我们首先需要知道select,poll,epoll都是IO多路复用的机制。I/O多路复用就通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。但select,poll,epoll本质上都是同步I/O,因为他们都需要在读写事件就绪后自己负责进行读写,也就是说这个读写过程是阻塞的。select的基本用法:http://blog.csdn.转载 2018-01-22 17:15:48 · 346 阅读 · 0 评论