社区
Linux/Unix社区
帖子详情
unix下,多进程socket 服务器问题
sunj_study
2006-01-17 09:39:47
本人没做过unix下socket的开发,现要做一个多进程socket服务器,请各位大侠帮忙。。
任务要求:控制子进程数为10个,一个子进程对应一个客户端连接socket,响应客户端请求信息(根据请求信息查询服务器的log文件),进行信息交互。
问题:1、子进程数通过一个变量计数控制,还是有别的典型方法?
2、如何做到当客户端close后,服务器端做出响应,杀掉服务器对应的子进程?
...全文
200
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--)。
checksum 算法
说明 checksum:总和检验码,校验和,可以理解为check(校验),sum(和)。 在数据处理和通信领域,通过一定算法对传输的数据进行求和以校验数据的完整性和准确性。 使用 算法 求和的算法大致是确定的,但是一些细节不是很重要,例如:校验和使用几个字节存储,只要收发两边处理规则一样就行。 网上示例,如下: USHORT CICMP::CheckSum(USHORT *buff,int Size) { unsigned long cksum = 0; //将数据以字为单位累加到c
网络通讯中的checksum算法
网络通讯中的checksum算法 一、实验目的和任务 本实验要求复习Debian系统抓包工具的使用。 本实验要求理解checksum算法原理和实现方法。 二、实验设备介绍 1.软件需求: win7操作系统,VMware workstation,ubuntu12 [配置交叉编译环境]。 2.硬件需求: PC内存大于1G,硬盘空间大于20G;smart210开发板。 三、注意事项和要求 1.启动Debian系统,并设置正确网络IP地址。 2.分析checksum字段与数据包的关系。 3.请抓包结果截图放入实验
checksum校验和算法总结
本文的目的是对常用的checksum算法进行总结,并不断完善和补充,以备后期在项目中直接使用。
checksum算法
累加和校验算法(CheckSum算法)
checksum的算法和代码实现
在汽车软件中,经常需要进行数据的校验和即checksum,以防止数据传输的过程中出错
Linux/Unix社区
23,223
社区成员
74,536
社区内容
发帖
与我相关
我的任务
Linux/Unix社区
Linux/Unix社区 应用程序开发区
复制链接
扫一扫
分享
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章