社区
Linux/Unix社区
帖子详情
unix下,多进程socket 服务器问题
sunj_study
2006-01-17 09:39:47
本人没做过unix下socket的开发,现要做一个多进程socket服务器,请各位大侠帮忙。。
任务要求:控制子进程数为10个,一个子进程对应一个客户端连接socket,响应客户端请求信息(根据请求信息查询服务器的log文件),进行信息交互。
问题:1、子进程数通过一个变量计数控制,还是有别的典型方法?
2、如何做到当客户端close后,服务器端做出响应,杀掉服务器对应的子进程?
...全文
168
13
打赏
收藏
unix下,多进程socket 服务器问题
本人没做过unix下socket的开发,现要做一个多进程socket服务器,请各位大侠帮忙。。 任务要求:控制子进程数为10个,一个子进程对应一个客户端连接socket,响应客户端请求信息(根据请求信息查询服务器的log文件),进行信息交互。 问题:1、子进程数通过一个变量计数控制,还是有别的典型方法? 2、如何做到当客户端close后,服务器端做出响应,杀掉服务器对应的子进程?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
13 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
tonyMCM
2006-01-17
打赏
举报
回复
signal(SIGCHLD,sig_chld); //处理僵尸,获取SIGCHLD信号
void sig_chld(int signo)//儿子一中断就消息触发
{
//这里放你要处理的代码
}
tonyMCM
2006-01-17
打赏
举报
回复
巧了 这个我做过 ==给你提示
fierygnu
2006-01-17
打赏
举报
回复
在父进程里计数。
man signal
read返回0
sunj_study
2006-01-17
打赏
举报
回复
int count = 0;
while(1) {
if(count < 11)
{
sin_size = sizeof(struct sockaddr_in);
new_fd = accept(sockfd, (struct sockaddr *)&their_addr, &sin_size))
if (new_fd == -1) {
perror("accept");
continue;
}
if (fork() == 0) {
count++;
/* 子进程 */
}
}
}
这样计数?SIGCLD信号如何获取?如果有信号这方面的详细资料请发一下,任务比较急,从头开来不及了,多谢。
2、socket被对端关闭时。
===我的问题是,对端关闭时,服务器如何做出响应?就是如何捕获客户端关闭这个事件?
fierygnu
2006-01-17
打赏
举报
回复
1、自己计数。fork时加1,收到SIGCLD信号减1。
2、socket被对端关闭时。
sunj_study
2006-01-17
打赏
举报
回复
多谢大家帮忙,结帖。
fierygnu
2006-01-17
打赏
举报
回复
gcc是编译器,ld是连接器。如果一个C文件,可以直接用gcc编译连接(gcc负责调用ld)。
sunj_study
2006-01-17
打赏
举报
回复
最后一问:要在unix下编译执行.c文件,用什么命令?
fierygnu
2006-01-17
打赏
举报
回复
是要在父进程调用。
fierygnu
2006-01-17
打赏
举报
回复
SIGCHLD主要是为了通知父进程子进程已退出,需要父进程调用wait来回收资源。如果父进程不做进一步处理,直接ignore,内核会回收资源。
sunj_study
2006-01-17
打赏
举报
回复
signal(SIGCHLD,sig_chld); 应该在父进程调用是吧?
我看到的例子程序这样处理SIGCHLD信号 signal(SIGCLD, SIG_IGN); 如果按第一句那样调用会不会有什么影响?
fierygnu
2006-01-17
打赏
举报
回复
在父进程里计数,不需要保护。
hundlom
2006-01-17
打赏
举报
回复
对,可以这样计数,但这个数你得用一个信号灯或其他的保护起来。以防止并发产生错误计数。
捕捉信号就用signal()函数。之后在回调函数中处理(count--)。
Linux下
Socket
编程利用
多进程
实现一台
服务器
与多台客户端并发通信
前些日子同“Linux应用编程”专栏中发布过的TCP及UDP在Linux或Windows下的通信都为单进程下的
Socket
编程,若还存在一些套接字相关函数模糊不清,读者可移步“
Socket
编程下tcp通信”和“
Socket
编程下udp通信”重温...
TCP/IP
Socket
和
UNIX
Socket
区别
Postgres的一位核心开发者曾经做过实验,证明
UNIX
Socket
的方式比TCP/IP
Socket
方式要快31%,TCP/IP
Socket
是网络上不同
服务器
之间进程的通信机制,也可以让同一
服务器
的不同进程通信。0 grpc-go、protobuf、...
Linux
多进程
通信开发(八):
unix
domain
socket
之 TCP 通信
这会是一系列文章,讲解的内容也很简单,文章的目的是让自己的知识固话和文档化,以备自己不时的复习,同时也希望能够给予初学者一些帮助。 前面的文章一系列文章有介绍了 ...什么是
Unix
Domain
Socket
? S...
网络
socket
编程实现并发
服务器
——
多进程
编程
多进程
编程 一、
服务器
并发访问的
问题
服务器
按处理方式可以分为迭代
服务器
和并发
服务器
两类。平常用C写的简单
Socket
客户端
服务器
通信,
服务器
每次只能处理一个客户的...
Linux
UNIX
域
socket
,进程间通信
UNIX
域套接字作用在同一台计算机上运行的两个进程间的通信。
UNIX
域套接字比因特尔网络套接字效率要高。它仅复制数据,不执行协议处理,不需要添加或删除网络报文头,无需计算校验和,不要产生顺序号,无需发送确认...
Linux/Unix社区
23,125
社区成员
74,509
社区内容
发帖
与我相关
我的任务
Linux/Unix社区
Linux/Unix社区 应用程序开发区
复制链接
扫一扫
分享
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章