[关闭]
@guochy2012 2014-06-15T11:52:21.000000Z 字数 638 阅读 1261

TCP故事迭代

1 实现基本的TCP通信

server能感受到client关闭,反之却不可以。

2 实现readn和written函数 所谓的粘包问题

3 实现readline函数

粘包的另一种方案

4 客户端引入select 客户端可以及时感应到server的关闭

先从client端学习Select,降低难度

5 服务端引入select server实现并发

这里有个问题,如果server收到数据后sleep(4),然后回送数据,而客户端发送两个数据后马上Ctrl + D   会导致server的崩溃。
为什么?
客户端发送两个数据 + Ctrl+D 之后,进行close,服务器过4S后发送第一个数据,收到一个RST报文段,此时再次发送第二个报文段,导致了SIGPIPE信号
如何改进?
客户端使用shutdown改进,这样客户端仅仅关闭Write端,仍然可以接受4s后服务器发送的数据。
server端则必须处理SIGPIPE信号。
但是出现一个BUG,Server端不停的接收到SIGPIPE信号,原因出现在written函数上。一个有符号数使用了size_t类型

6 shutdown改进客户机 server处理SIGPIPE

stdio是否继续监听

7 采用poll改进程序

区分maxfd 和maxi的用处
poll不需要maxfd 因为poll只需要检查数组,不需要set

8 采用epoll改进程序

epoll既用不到maxfd, 也用不到maxi

多进程编写并发server

附录:
先用select poll epoll把客户端实现、不涉及服务器。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注