如何搭建socket并开启守护进程

最近由于项目需要,要学习网络编程有关的知识,socket以前在学网络的时候搭建过,不过这次要将服务器用守护进程跑起来,经过查找资料终于有点一知半解,并且实现了守护进程和socket的结合,赶紧记录下来。

一. socket是什么?


在本地可以通过进程PID来唯一标识一个进程,但是在网络中这是行不通的。其实TCP/IP协议族已经帮我们解决了这个问题,网络层的“ip地址”可以唯一标识网络中的主机,而传输层的“协议+端口”可以唯一标识主机中的应用程序(进程)。这样利用三元组(ip地址,协议,端口)就可以标识网络的进程了,网络中的进程通信就可以利用这个标志与其它进程进行交互。

网络中的进程是通过socket来通信的。

二. socket基本操作?


1. socket()
2. bind()
3. listen()
4. connect()
5. accept()
6. read()
7. write()
8. close()

三. 守护进程是什么?


  1. 守护进程:生存期长,在系统引导装入时启动,在系统关闭时终止,没有控制终端,只在后台运行。所有守护进程的父进程都是init进程

  2. 一个或多个进程构成进程组,一个或多个进程组构成会话组

  3. 守护进程编程规则:

    1. 创建子进程,父进程退出(使得子进程成为孤儿进程,孤儿进程运行一段时间后,由init进程统一接管)
    2. 调用setsid创建一个新的会话,并担任该会话组的组长.setsid的作用如下:

      • 成为新会话组的首进程

      • 成为一个新进程组的首进程

      • 脱离控制终端

    3. 改变当前目录为根目录—chdir(“/“);

    4. 重设文件权限掩码—umask(0);—-对所有权限都开放
    5. 关闭不再需要的文件描述符—–

      for(i=0;i<MAXFILE;i++)
      {
      close(i);
      }

四. linux下如何将socket和守护进程应用起来?


由于项目保密性需要,这个可以参考一个网址linux下守护进程和socket应用的例子,我对代码进行了修改,如将read()、write()函数替换成了send()、recv()函数,实现了服务器有守护进程跑着,客户端可随时对服务器发送request,服务器解析之后返回response。

相关代码还是等毕设之后吧~