复用

【linux下c语言服务器开发系列5】功能齐全的聊天室 sever [IO复用+多进程+信号处...

*爱你&永不变心* 提交于 2019-12-03 01:03:41
上个博客的最后,说要写一个功能齐全一些服务器,所以,这边博客主要对这个服务器进行一个简单的介绍。这个服务器,是一个聊天室服务器。 当客户端连接到服务器后,就可以收到所有其他客户端发送给服务器的内容。主要实现原理如下: 1.IO复用: 利用epoll函数,对多个套接字进行监听,包括:listenfd,标准输入套接字,与子进程通讯的套接字还有信号处理的套接字。 listenfd:这个套接字主要是服务器端用来监听是否有新的客户端的连接的。一旦有连接,则视为新的客户到来,然后,准备连接,分配用户内存,对应各种信息,连接成功后,fork一个子进程进行对这个连接进行一对一的处理。这里的处理,主要是对各种套接字进行监听,并进行相应的处理,下文的多进程部分会有。 标准输入套接字:为的是在服务器端也能输入一些信息,并让这个服务器根据输入的信息进行反应。不过,我这里的反应主要是让服务器原样输出。 与子进程通讯的套接字:因为没个客户,都是用一个子进程在单独的处理,各个子进程之间的通信,首先需要通过父进程,然后再进行广播,从而实现子进程与其他所有子进程之间的通信。这里,子进程与父进程之间的通信,是靠管道完成的。但是,传统的管道是pipe()函数创建的,只能单工的通信,我这里为了双工的通信,使用的是socketpair()创建的管道,管道的两端都可以进行读写操作。如果子进程有数据写给父进程