c - 从不同的进程服务器写入客户端
问题描述
我有一台由主机和一些从机组成的服务器(例如一个)
我希望主人在连接时分发客户端。
//Initialisation
struct sockaddr_in clientaddr;
socklen_t clientlen;
clientlen = (socklen_t)sizeof(clientaddr);
int listenfd = Open_listenfd(PORT);
//Children instanciation here
int pipe_in = 0;
for (int i = 0; i < NPROC; i++)
{
int p[2];
pipe(p);
children[i].id=Fork();
if(children[i].id == 0){
close (p[1]);
pipe_in=p[0];
goto CHILDREN;
}
else{
close (p[0]);
children[i].pipe_to = p[1];
}
}
//Master Loop
int curchild = 0;
while (1) {
int connfd = Accept(listenfd, (SA *)&clientaddr, &clientlen);
write(children[curchild].pipe_to, &connfd, sizeof(connfd));
printf("Sent to slave %d\n",connfd);
curchild = Next(curchild);
}
return 0;
//Slave Process
CHILDREN :
while (1) {
int connfd;
read(pipe_in, &connfd, sizeof(connfd));
printf("Receveid from master %d\n",connfd);
Rio_writen(connfd, "Test\n", 5);
Close(connfd);
}
这里descriptor sent 和receiveid 类似,但是Rio_writen
返回错误:Bad file descriptor
解决方案
只有在创建子进程之前打开文件和套接字描述符时,它们才会传递给子进程。
例如:
- 父级:接受新的 TCP 请求(从而接收新的
connfd
) - 父母:分叉,创建一个新的孩子
- 父母:将 传递
connfd
给新的孩子 - Child:处理套接字连接
推荐阅读
- apache-flink - Flink CEP:FollowedBy 模式:同一事件多次循环该模式
- swift - 从 Swift Code 以 root 身份执行终端命令
- python - 在python中缩进if和else语句
- azure-ad-b2c - 在 Azure Active Directory B2C 自定义策略中通过电子邮件查找现有用户
- r - R httr Linkedin API:错误请求(HTTP 400)
- html - 相对于彼此缩放 svg 组
- typescript - Typescript - 联合类型和泛型类型引发不兼容错误
- windows - 从 Windows Server 获取 iSCSI 设备的目标 IP 地址
- excel - VBscript复制范围并将特殊转置粘贴到变量位置的行
- json - Python:转换成JSON格式