accepet/listen
三次握手是发生在客户端的connect,发生在服务端的listen到accept之间,由协议栈实现。
listen(fd,backlog)的第二个参数指的是监听的全连接队列里面节点的个数
accept从全连接队列里取出一个tcb并为其分配一个fd(open,accept,socket可以分配新的fd)
UDP的并发
大部分udp服务器是顺序迭代的,服务器等待客户端请求,然后读取请求,处理请求,发回响应。但是,当处理客户端请求需要很长时间,就需要考虑某种形式的并发。一个“长处理”可以理解为处理请求的时间明显大于发送请求的时间。
并发的常见思路是使用多线程。服务器在读取一个新请求之后,可以交由一个线程处理,该线程在处理之后直接将响应内容发给客户端。另一方面,udp服务器和多个客户端交互,但是却没有多个socket。典型的解决方案是,服务器为每个客户端创建一个新的socket,并绑定一个新的端口。客户端以后就通过这个新的socket与服务器通信,获得响应。总结来说,udp并发服务器,针对多个客户端,可以创建多个socket;针对多个请求,可以使用多线程(线程池)进行处理。
大量time_wait和close_wait
(44条消息) 网络面试题:服务器出现大量的time_wait或close wait问题及解决方案_我是方小磊的博客-CSDN博客(44条消息) TCP通信过程中time_wait和close_wait产生过多的原因和解决方法_Kuany_的博客-CSDN博客
TCP