摘要: 1、谨慎处理Linux信号量和错误号 首先介绍两个很常用网络编程的用法, (1)很多套接字程序中为了防止进程收到SIGPIPE信号时崩溃往往会在进程中设置忽略信号SIGPIPE​。 (2)但是很多程序为了提高send的成功率对send做了二次封装,即对send的返回值进行判断,如果返回-... 阅读全文
posted @ 2016-11-26 17:29 luizp 阅读(361) 评论(0) 推荐(0) 编辑
摘要: 一、IP分片 物理网络层一般要限制每次发送数据帧的最大长度。任何时候I P层接收到一份要发送的IP数据报时,它要判断向本地哪个接口发送数据(选路),并查询该接口获得其MTU。IP把MTU与数据报长度进行比较,如果需要则进行分片。分片可以发生在原始发送端主机上,也可以发生在中间路由器上。 ​... 阅读全文
posted @ 2016-11-26 17:24 luizp 阅读(554) 评论(0) 推荐(0) 编辑
摘要: 性能优化主要应该着眼于I/O和内存管理,I/O系统调用通常发生在毫秒级,CPU调用在亚微秒级。 一、散列 1、散列函数一般需要快速工作,需要满足一下条件: (1)最多含有一个除法运算(一般是最后的取摸运算) (2)生成广泛的散列键 (3)不依赖于将促使产生聚集的数据属性 通用的散列函数:Hash... 阅读全文
posted @ 2016-11-26 16:25 luizp 阅读(128) 评论(0) 推荐(0) 编辑
摘要: STUN是一个简单的客户端 - 服务器协议。客户端发送一个请求到一台服务器,而服务器返回一个响应。 有两种类型的请求: 绑定请求(通过UDP发送)和共享密钥请求(发送TLS (通过TCP)) 。 共享秘密请求服务器返回一个临时的用户名和密码。此用户名和密码用于在随后的绑定请求和绑定响应,... 阅读全文
posted @ 2016-11-26 16:11 luizp 阅读(2241) 评论(0) 推荐(0) 编辑
摘要: (1)完全透明NAT(Full Cone NAT): 从相同内部主机(IN IPX) +端口(IN PORTX)发送的数据映射为相同的IP(OUTIP X)和端口(OUT PORT X)发送到外网。并且从另一个服务器(Y),如果直连到映射的IP(OUT IP X)和端口(OUT PORT X... 阅读全文
posted @ 2016-11-26 16:08 luizp 阅读(408) 评论(0) 推荐(0) 编辑
摘要: -rpath dir Add a directory to the runtime library search path. This is used when linking an ELF executable with shared objec... 阅读全文
posted @ 2016-11-26 16:05 luizp 阅读(247) 评论(0) 推荐(0) 编辑
摘要: EINTR错误的产生: 当系统阻塞于某个慢系统调用的一个进程捕获某个信号且相应信号处理函数返回时,该系统调用可能返回一个EINTR错误。例如:在socket服务器端,设置了信号捕获机制,有子进程,当在父进程阻塞于慢系统调用时由父进程捕获到了一个有效信号时,内核会致使accept返回一个EIN... 阅读全文
posted @ 2016-11-26 16:01 luizp 阅读(219) 评论(0) 推荐(0) 编辑
摘要: RST为“复位”,它是TCP在某些错误情况下所发出的一种TCP分节。 有三个条件可以产生RST: 1), SYN到达某端口但此端口上没有正在监听的服务器。 2), TCP想取消一个已有连接 3), TCP接收了一个根本不存在的连接上的分节。 ... 阅读全文
posted @ 2016-11-26 15:58 luizp 阅读(517) 评论(0) 推荐(0) 编辑
摘要: 套接字的默认状态均为阻塞,产生阻塞的操作有下面四类 1、读操作 read时对于一个阻塞套接字,如果该套接字的接收缓冲区没有数据可读,则该进程将被投入睡眠,直到有数据到达。对于非阻塞套接字如果接收缓冲区没有数据可读则调用会立即返回一个EWOULDBLOCK错误。 2、写操作 write时对于一个阻... 阅读全文
posted @ 2016-11-26 15:37 luizp 阅读(131) 评论(0) 推荐(0) 编辑
摘要: int close(int sockdf); 行为描述:​ 1、close引发描述符的引用计数减一,当该计数为0时才会关闭套接字。 2、close会终止读和写两个方向的数据传送,其行为受SO_LINGER属性影响。 (1)若不设置SO_LINGER属性或者关闭SO_LINGER属性其默... 阅读全文
posted @ 2016-11-26 14:52 luizp 阅读(235) 评论(0) 推荐(0) 编辑
摘要: Linux编程中往往程序会莫名其妙的在write,send等地方退出,如果有这种问题需要注意是不是信号量引起的。 网络编程中可以有选择性的使用signal函数处理某些信号,下面介绍几个常用的信号。​ 1、SIGPIPE 产生原因: TCP的"四次分手"关闭. TCP是全双工的信道, 可... 阅读全文
posted @ 2016-11-26 14:44 luizp 阅读(239) 评论(0) 推荐(0) 编辑
摘要: TCP状态转换分服务端和客户端两部分: 一、服务端状态变迁:​ 服务端​创建套接字之后调用listen函数将套接字有一个未连接的主动套接字转换为被动套接字,指示内核应接受指向该套接字的连接请求,套接字状态由CLOSE转换为LISTEN,等待客户端连接。所以服务端是被动接收连接的,服务... 阅读全文
posted @ 2016-11-26 14:41 luizp 阅读(285) 评论(0) 推荐(0) 编辑