网络编程
文章平均质量分 67
yongqingjiao
这个作者很懒,什么都没留下…
展开
-
SO_REUSEADDR
1、一般来说,一个端口释放后会等待两分钟之后才能再被使用,SO_REUSEADDR是让端口释放后立即就可以被再次使用。 SO_REUSEADDR用于对TCP套接字处于TIME_WAIT状态下的socket,才可以重复绑定使用。server程序总是应该在调用bind()之前设置SO_REUSEADDR套接字选项。TCP,先调用close()的一方会进入TIME_WAIT状态2、SO_R转载 2017-12-09 09:50:31 · 124 阅读 · 0 评论 -
SO_REUSEPORT
以前就在国外的论坛接触过SO_REUSEPORT,这两天朋友群又在传播nginx 1.9 reuseport多进程监听参数。那咱们简单说下SO_REUSEPORT的应用场景, 为什么会用他? 然而在讲解SO_REUSEPORT之前,需要先说下我们常用的网络模型。文章写得不太严谨, 请砖家拍砖,另外标注下原文地址, http://xiaorui.cc/?p=2413在转载 2017-12-09 09:49:28 · 535 阅读 · 0 评论 -
socket可读,可写的条件
socket可读可写条件,经常做为面试题被问,因为它考察被面试者对网络编程的基础了解的是不是够深入。要了解socket可读可写条件,我们先了解几个概念:1.接收缓存区低水位标记(用于读)和发送缓存区低水位标记(用于写):每个套接字有一个接收低水位和一个发送低水位。他们由select函数使用。接收低水位标记是让select返回"可读"时套接字接收缓冲区中所需的数据量。对于TCP,其默转载 2017-12-16 13:39:19 · 876 阅读 · 0 评论 -
epoll检测对端关闭
在对系统问题进行排查时,我发现了一个奇怪的现象:明明是对方断开请求,系统却报告一个查询失败的错误,但从用户角度来看请求的结果正常返回,没有任何问题。对这个现象深入分析后发现,这是一个基于 epoll 的连接池实现上的问题,或者说是特性 :)首先解释一下导致这个现象的原因。在使用 epoll 时,对端正常断开连接(调用 close()),在服务器端会触发一个 epoll 事件转载 2017-12-16 14:34:43 · 7349 阅读 · 1 评论 -
socket读写返回值的处理
在调用socket读写函数read(),write()时,都会有返回值。如果没有正确处理返回值,就可能引入一些问题总结了以下几点1当read()或者write()函数返回值大于0时,表示实际从缓冲区读取或者写入的字节数目2当read()函数返回值为0时,表示对端已经关闭了 socket,这时候也要关闭这个socket,否则会导致socket泄露。netstat命令查看下,如果有clos转载 2017-12-16 14:58:14 · 1653 阅读 · 0 评论 -
网络编程释疑之:TCP半开连接的处理
熟悉基于TCP协议进行linux高性能、高并发服务端编程的朋友肯定应该知道每个文件描述符及其所占的资源对并发量的影响。在这种7*24甚至*365不间断运行的服务器上,一个描述符被浪费,两个被浪费...如果被浪费的多了,那还何谈高并发,高性能。除去文件描述被正常占用的情况外,是什么导致了我们可用的文件描述符越来越少呢?什么是半开连接?当客户端与服务器建立起正常的TCP连接后,如果客户主机掉线转载 2017-12-16 15:14:26 · 244 阅读 · 0 评论 -
设置O_NONBLOCK
intevutil_make_socket_nonblocking(evutil_socket_t fd){#ifdef _WIN32 { unsigned long nonblocking = 1; if (ioctlsocket(fd, FIONBIO, &nonblocking) == SOCKET_ERROR) {原创 2017-12-08 07:13:51 · 6801 阅读 · 0 评论 -
ET还是LT?
出处:https://zhuanlan.zhihu.com/p/21374980?refer=yedongfuEPOLL事件的两种模型:Level Triggered (LT) 水平触发.socket接收缓冲区不为空 有数据可读 读事件一直触发.socket发送缓冲区不满 可以继续写入数据 写事件一直触发符合思维习惯,epoll_wait返回的事件就是socket的状态Edge Triggered转载 2018-01-02 14:00:51 · 874 阅读 · 0 评论 -
linux-线程/进程通信eventfd
eventfd 在内核版本,2.6.22以后有效。查看内核版本可以用命令 uname -r 在看muduo源码时,项目中使用eventfd机制实现线程间的唤醒(通知)。觉得效率比较高,所以拿来学习下。其也可以实现父子进程间的通信。 首先使用: man eventfd name:eventfd–创建一个用于事件通知的描述符SYNOPSIS:#include int event转载 2017-12-19 07:54:17 · 741 阅读 · 0 评论