Linux socket连接句柄进程间传送示例代码

本文介绍了一个示例程序,展示了如何在Linux环境中,将网络侦听进程的socket连接句柄通过进程间通信传递给数据处理进程,实现一对多的网络连接管理。
摘要由CSDN通过智能技术生成

准备做一个网络侦听进程和数据处理进程分离的模块,侦听进程和数据处理进程一对多关系,希望侦听进程在收到连接后,把socket句柄传送给空闲的数据处理进程。对于进程间文件描述符传送,先做了如下的示例程序。

 

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/select.h>
#include <sys/un.h>
#include <netinet/in.h>
#include <sys/wait.h>
#include <sys/uio.h>

/**
 *  Author: luckysym  
 *  Date:   3/22/2013
 *
 *	Global Variables:
 *		int client_pipe_fd        与子进程通讯的fd,用于向子进程发送远程socket句柄
 *
 * 	Functions:
 * 		create_inet_server()      创建tcp侦听服务,父进程调用
 * 		create_pipe_server()      创建本地管道侦听服务,父进程调用
 * 		pipe_connect()            子进程连接父进程的管道
 * 		inet_client_connected()   父进程收到远程tcp连接的处理函数,收到连接后将句柄发送到子进程
 * 		pipe_client_connected()   父进程收到子进程的管道连接处理函数,函数中将管道句柄保存为全局变量
 * 		wait_for_connect()        父进程等待socket连接,包括等待子进程管道连接,或者远程tcp连接,
 * 		                          收到连接后根据socket类型分别调用inet_client_connected()
 * 		                          或pipe_client_connected()
 * 		recv_fd()                 子进程用于接收父进程发来的远程socket句柄
 *
 *		child_main()              子进程主函数
 *
 *  程序测试执行过程:
 *  	1. 父进程main函数启动后立即fork一个子进程,然后创建管道监听
 *  	2. 子进程启动后,等待5秒钟后(保证父进程管道创建完毕),连接父进程管道
 *  	3. 父进程收到子进程的管道连接后,保存管道通讯句柄,然后创建tcp侦听(端口30098)
 *  	4. 子进程连接父进程完毕后,等待接收父进程的管道消息
 *
 *  	4. 远程启动一个telnet连接到30098端口。
 *  	5. 父进程收到连接后,首先向远程发送"Hello Client"消息
 *  	6. 然后父进程将tcp连接句柄通过管道发送给子进程(发送过程中句柄被复制)
 *  	7. 发送完毕后,父进程关闭tcp连接句柄
 *  	8. 子进程收到tcp连接句柄后,向远程telnet发送"This is child process speaking"消息
 *  	   然后准备读取该tcp连接
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值