这两天总结写了一个LinuxC下面的多进程socket通信的交互程序,收获良多。特别是对fork进程复制函数有了进一步的了解。同时对socket的处理有了更好掌握:
服务器端
socket 初始化
bind 与地址的绑定 用到 sockaddr_in
listen 监听
建立一个死循环
accept 接收一个请求
fork 复制一个进程
子进程 返回值0
再次 fork 创建子进程的子进程
返回非零是父进程 推出 exit
孙子进程处理任务(因为其主进程以及死亡,所以其进程有Init接管)
主进程waitpid 主进程的子进程很快结束退出,而接管他的子孙进程已经脱离主进程非init进程托管
最后处理善后的接管释放等动作
客服端比较简单
直接
socket 初始化
sockaddr_in 初始化
connect 连接实现绑定
write 请求
read 请求
有一个问题在socket通信的过程中read 和 write 最好指定读取的数据实际长度,否则可能会出现异常:
1、太短 数据没读取全
2、太长 会使得一直在请求 知道timeout在断开
还有个问题就是write 和 read 并不一定会真实的返回你指定的写或者读的数据长度,需要循环去处理他。
完毕,下午又要搞PHP一会儿,无聊……