@guochy2012
2014-06-15T11:52:21.000000Z
字数 638
阅读 1261
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把客户端实现、不涉及服务器。