socket
dodo_check
这个作者很懒,什么都没留下…
展开
-
client 和 server 定时错误处理
在socket 编程中除了处理正常os的返回错误外,还需要做定时监控1. client: 如果在发送数据后,指定时间内没有收到server数据返回,可以直接 关掉了2. server: 对每个client进行计时,如果在指定时间内 client没有进行过读写,可以直接关掉了转载 2012-10-16 18:31:28 · 496 阅读 · 1 评论 -
epoll 基础
在linux的网络编程中,很长的时间都在使用select来做事件触发。在linux新的内核中,有了一种替换它的机制,就是epoll。相比于select,epoll最大的好处在于它不会随着监听fd数目的增长而降低效率。因为在内核中的select实现中,它是采用轮询来处理的,轮询的fd数目越多,自然耗时越多。并且,在linux/posix_types.h头文件有这样的声明:#define __转载 2013-01-29 16:05:56 · 455 阅读 · 0 评论 -
socket 状态转换
一.TCP简介 TCP提供一种面向连接的,可靠的字节流服务。面对连接意味着两个使用TCP的应用,在彼此交换数据之前必须先建立一个连接。TCP通过以下方式提供可靠性: 1. 应用数据被分割成TCP认为最适合发送的数据块,由TCP传递给IP的信息单位成为报文段。 2. 当TCP发出一个段后,它就启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一转载 2013-02-03 22:27:07 · 1742 阅读 · 0 评论 -
TCP协议三次握手过程分析
TCP(Transmission Control Protocol) 传输控制协议TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接:位码即tcp标志位,有6种标示:SYN(synchronous建立联机) ACK(acknowledgement 确认) PSH(push传送) FIN(finish结束) RST(reset重置) URG(urgent紧急转载 2013-07-30 15:17:57 · 526 阅读 · 0 评论 -
socket__listen
int listen(int fd, int backlog);socket系统调用listen只被tcp 服务器使用,他做两件事:1. 将未链接的套接口转换为被动套接口,指示内核接受向此套接口的连接请求,调用此系统调用后tcp 状态机有close转换到listen.2.第二个参数制定了内核为此套接口排队的最大连接个数。关于第二个参数,对于给定的监听套接口,内核要维护两个队转载 2013-07-30 15:26:39 · 505 阅读 · 0 评论 -
服务器大量time_wait处理
出现条件:a. 服务器主动关闭 b.短连接服务加剧 根据TCP协议定义的3次握手断开连接规定,发起socket主动关闭的一方 socket将进入TIME_WAIT状态,TIME_WAIT状态将持续2个MSL(Max Segment Lifetime),在Windows下默认为4分钟,即240秒,TIME_WAIT状态下的socket不能被回收使用. 具体现象是对于一个处理大量短连接的服务器转载 2013-02-04 15:13:48 · 709 阅读 · 0 评论 -
select
select()机制中提供一fd_set的数据结构,实际上是一long类型的数组,每一个数组元素都能与一打开的文件句柄(不管是socket句柄,还是其他文件或命名管道或设备句柄)建立联系,建立联系的工作由程序员完成,当调用select()时,由内核根据IO状态修改fe_set的内容,由此来通知执行了select()的进程哪一socket或文件可读。 多端口复用函数select在调用前要首转载 2013-01-18 12:27:17 · 346 阅读 · 0 评论 -
socket的keep-alive
第一部分【需求】不影响服务器处理的前提下,检测客户端程序是否被强制终了。【现状】服务器端和客户端的Socket都设定了keepalive属性。服务器端设定了探测次数等参数,客户端、服务器只是打开了keepalive机能服务器端起了一个监视线程,利用select来检测socket是否被关闭。。。下面这是我的一点肤浅理解。1.关于keep alive转载 2012-12-17 16:22:21 · 999 阅读 · 0 评论 -
socket 配置选项
1.SO_SNDBUF,SO_RECVBUF一个应用程序通过设定SO_SNDBUF为0把缓冲区关闭,然后发出一个阻塞send()调用。在这样的情况下,系统内核会把应用程序的缓冲区锁定,直到接收方确认收到了整个缓冲区后send()调用才返回。似乎这是一种判定你的数据是否已经为对方全部收到的简洁的方法,实际上却并非如此。想想看,即使远端TCP通知数据已经收到,其实也根本不代表数据已经成功送给客户端转载 2013-01-25 16:30:18 · 660 阅读 · 0 评论 -
socket 编程学习
1. 熟悉tcp/ip基础。a 看tcp技术详解, 注意tcp建立时的状态转化。b 通信时的tcp包数据。syn.ack 等, 注意rst包 是在出现异常时进行重置2. 了解socket apiconnect\ accept等原理,与tcp 原理结合理解注意对socket的参数设置3. 了解socket 编程的几种模型注意select , epoll转载 2013-02-03 23:23:09 · 392 阅读 · 0 评论 -
epoll的 et,lt关注点
epoll模型有两种工作模式,ET和LT,两种模式下都有一些细节值得注意,以下是一些思考: 一、ET模式下Q1: 调用accept时,到底TCP完成队列里有多少个已经建立好的连接?这里又得分情况来说:没有连接。这种情况发生在TCP连接被客户端夭折,即在服务端调用accept之前客户端给出一个RST。该RST导致刚刚建立好的连接从服务器端的TCP完成队列中被移出。源自转载 2013-01-30 10:24:15 · 558 阅读 · 0 评论 -
epoll 的accept , read, write(重要)
在一个非阻塞的socket上调用read/write函数, 返回EAGAIN或者EWOULDBLOCK(注: EAGAIN就是EWOULDBLOCK)从字面上看, 意思是:* EAGAIN: 再试一次* EWOULDBLOCK: 如果这是一个阻塞socket, 操作将被block* perror输出: Resource temporarily unavailable转载 2013-01-29 16:36:44 · 5935 阅读 · 2 评论 -
Socket关闭, shutdown, close, linger
以下描述主要是针对windows平台下的TCP socket而言。首先需要区分一下关闭socket和关闭TCP连接的区别,关闭TCP连接是指TCP协议层的东西,就是两个TCP端之间交换了一些协议包(FIN,RST等),具体的交换过程可以看TCP协议,这里不详细描述了。而关闭socket是指关闭用户应用程序中的socket句柄,释放相关资源。但是当用户关闭socket句柄时会隐含的触发TCP连接转载 2013-01-25 16:16:11 · 4511 阅读 · 1 评论 -
一个误解: 单个服务器程序可承受最大连接数“理论”上是“65535”
请注意,这里有两个词分别被我标记上了引号,一个是“理论”,一个是“65535”。强调“理论”这个词,是想特别明确误解者的意思:就是说,这个值是不可能被打破的,是铁板钉丁的。而65535这个数字的由来,很多人想当然地将它与port最大值联系起来。的确,TCP的端口数,最大值确实为65535。但是,这并不代表一个服务器可以接受的连接数就是这个值,很多人之所以把这两个概念搞混淆是因为对socket和po转载 2012-12-17 17:17:23 · 846 阅读 · 0 评论 -
心跳包
所谓的心跳包就是在客户端和服务器端间定时通知对方自己状态的一个自己定义的命令字,按照一定的时间间隔发送,类似于心跳,所以叫做心跳包。 一般是用来判断对方(设备,进程或其它网元)是否正常动行,一般采用定时发送简单的通讯包,如果在指定时间段内未收到对方响应,则判断对方已经当掉。用于检测TCP的异常断开。 基本原因是服务器端不能有效的判断客户端是否在线也就是说转载 2012-12-17 16:23:27 · 754 阅读 · 0 评论 -
Socket TCP技术详解
TCP一、TCP数据包格式 首部格式:http://en.wikipedia.org/wiki/Transmission_Control_Protocol 建立和关闭连接时,SYN和FIN需要占一个序列号,其它的纯ACK不占序列号。伪首部计算:http://www.tcpipguide.com/free/t_TCPChecksumCalculationandtheTCPPs转载 2012-11-23 17:59:12 · 859 阅读 · 0 评论 -
tcp rst
有三个条件可以产生RST包:1. 建立连接的SYN到达某端口,但是该端口上没有正在监听的服务 如:IP为192.168.1.33的主机上并没有开启WEB服务(端口号为0x50),这时我们通过IE去访问192.168.1.33,通过Wireshark抓包,可以看到,对此SYN包的回复为RST。说明此服务器(即IP192.168.1.33)是存在的,不过其上并没有运行WEB Server(转载 2012-10-16 18:20:46 · 503 阅读 · 0 评论 -
libev入门
实现应用的捷径是充分利用开放源代码和开放标准等资源。为了实现视频服务器,研究了开源视频服务器DarwinStreamingServer,Reactor并发编程设计模式,同时还评估了Boost.Asio、ACE、libevent以及 libev等网络编程相关的库。得出的结论是基于DarwinStreamingServer的设计思想,采用Reactor设计模式实现一个更加高效并可扩展的视频服务器,网络转载 2014-03-11 14:54:39 · 711 阅读 · 0 评论