网络编程Socket之TCP
文章平均质量分 77
对《UNIX Network Programming》学习整理的TCP相关笔记
小T是我
只想在一条道上越走越远~
展开
-
网络编程Socket之TCP之TIME_WAIT状态详解
下面我们用最简单的一对一的客户服务器模型来重现编程中遇到的一些问题:初学socket的时候在编写socket程序的时候会遇到很多莫名其妙的问题,比如说bind函数返回的常见错误是EADDRINUSE使用下面的程序重现这个状态:client:int main(int argc, const char * argv[]){ struct sockaddr_in原创 2014-07-19 17:53:41 · 2450 阅读 · 0 评论 -
网络编程Socket之TCP之connect详解
对TCP套接字调用connect会激发三次握手,如下:客户端是主动打开连接的一端,会发送第一个SYN分节,然后等待确认,此时连接状态为SYN_SENT,当收到服务端的确认后连接建立,状态变为ESTABLISHED;服务器是被动打开连接的一端,调用listen导致套接字从CLOSED状态变为LISTEN状态,当收到来自客户端的SYN分节以后状态变为SYN_RCVD,然原创 2014-07-19 20:51:09 · 32193 阅读 · 0 评论 -
网络编程Socket之TCP之read/write
从写一个TCP套接字的write调用成功返回仅仅表示我们可以重新使用原来的应用进程缓冲区,并不代表对端TCP或应用进程已接收到数据。对端TCP必须确认收到的数据,伴随来自对端的ACK的不断到达,本端TCP至此才能从套接字发送缓冲区中丢弃已确认的数据,TCP必须为已发送的数据保留一个副本,直到它被对端确认为止。UDP不保存应用进程数据的副本因此无需一个真正的发送缓冲区,wri原创 2014-07-20 17:56:34 · 13757 阅读 · 0 评论 -
网络编程Socket之TCP之close/shutdown详解
close:当套接字的引用计数为0的时候才会引发TCP的四分组连接终止序列; shutdown:不用管套接字的引用计数就激发TCP的正常连接终止序列;这里由一个SO_LINGER套接字选项struct linger { int l_onoff; /* 0 = off, nozero = on */ int l_linger;原创 2014-07-20 20:36:20 · 9430 阅读 · 3 评论 -
网络编程Socket之RST详解
产生RST的三个条件:1. 目的地为某端口的SYN到达,然而该端口上没有正在监听的服务器;2. TCP想取消一个已有的连接;3. TCP接收到一个根本不存在的连接上的分节; 现在模拟上面的三种情况:client:struct sockaddr_in serverAdd; bzero(&serverAdd, sizeof(serverAdd));原创 2014-07-22 15:12:06 · 11325 阅读 · 3 评论 -
网络编程Socket之TCP之close/shutdown详解(续)
接着上一篇网络编程Socket之TCP之close/shutdown详解原创 2014-07-23 10:52:56 · 2444 阅读 · 0 评论 -
网络编程Socket之TCP之select概述
I/O模型:1. 阻塞式I/O模型2. 非阻塞式I/O模型:使用fcntl将套接字设置成非阻塞;然后轮询读取数据,这样会耗费大量CPU时间;3. I/O复用模型:阻塞在select上;4. 信号驱动式I/O模型:5. 异步I/O模型:aio_read,信号直到数据已复制到应用进程缓冲区才产生select:select的最后一个时间参数:1.原创 2014-07-23 11:35:33 · 2301 阅读 · 0 评论