1、TCP半关闭状态:主动发起关闭方才会处于的状态,被动方不会
TIME_WAIT:主动发起关闭方会处于的状态2MSL超时:大约一分钟左右:不确定对方是否收到自己的ACK(回应FIN):等满2MSL:确保主动关闭方发送的最后一个ACK到达对方
shutdown();实现半关闭,还可以指定关闭状态:使用close()只是描述符引用计数减1,shutdown全关
TIME_WAIT状态不能再次监听同一个端口
端口复用:setsockopt():使处于TIME_WAIT状态的时,依旧可以监听
int opt=1;
setsockopt(listenfd,SOL_SOCKET,SO_REUSEADDR,&opt,sizeof(opt));
2、多路I/O转接服务器:不再由应用程序自己监视客户端连接,取而代之由内核代替应用程序监视
主要方法有3种:
1)select
#include <sys/select.h>
#include <sys/time.h>
#include <sys/types.h>
#include <unistd.h>
int select(int nfds, fd_set *readfds, fd_set *writefds,
fd_set *exceptfds, struct timeval *timeout);
参1:所监听的所有文件描述符中,最大的文件描述符+1
fd_set:文件描述符事件集合(位图)
参2、3、4:所监