socket网络编程处理并发的方式
1.多线程
创建一个子线程将任务分配给子线程处理
2.IO多路复用
单线程处理多个客户端的请求
select 多路选择
poll 轮询
epoll 基于事件的轮询
解决阻塞问题
accept
recv/send 默认情况下都是阻塞的
可以通过以下方式设置成非阻塞
int listenfd = socket(AF_INET, SOCK_STREAM | SOCK_NONBLOCK, 0)
fcntl();
ioctl();
select函数
最后一个值没有设置,表示一直等待。
最后一个值设置之后,表示固定时间返回一次。
在网络编程中一定会碰到的三个半事件
当建立连接时
当消息到来时
当链接断开时
当消息发送完成时
当发生上述三个半事件时需要处理