网络通信、Unix域套接字与Shell脚本入门
1. 网络套接字:进程与网络的通信方式
在网络通信中,进程与网络之间的数据读写操作依赖于套接字。对于已经建立的网络连接,进程可以通过系统调用(如recv(2)和send(2))来进行数据的读写。
在Unix系统里,进程借助套接字来识别与网络通信的时机和方式。套接字是进程通过内核访问网络的接口,它代表了用户空间和内核空间的边界,同时也常用于进程间通信(IPC)。
由于进程访问网络的方式各异,所以存在不同类型的套接字。例如,TCP连接由流式套接字(SOCK_STREAM)表示,UDP连接则由数据报套接字(SOCK_DGRAM)表示。
设置网络套接字较为复杂,需要考虑套接字类型、IP地址、端口以及传输协议等因素。不过,在处理好初始细节后,服务器会采用标准方法来处理来自网络的传入流量。
下面是服务器处理传入流式套接字连接的流程:
graph LR A[主进程使用监听套接字寻找网络连接] --> B{有新连接进入?} B -- 是 --> C[主进程使用accept()系统调用接受连接] C --> D[创建专用的读写套接字] D --> E[主进程使用fork()创建新子进程处理连接] E --> F[原套接字继续监听更多连接] B -- 否 --> A进程设置好