社区
Linux/Unix社区
帖子详情
unix下,多进程socket 服务器问题
sunj_study
2006-01-17 09:39:47
本人没做过unix下socket的开发,现要做一个多进程socket服务器,请各位大侠帮忙。。
任务要求:控制子进程数为10个,一个子进程对应一个客户端连接socket,响应客户端请求信息(根据请求信息查询服务器的log文件),进行信息交互。
问题:1、子进程数通过一个变量计数控制,还是有别的典型方法?
2、如何做到当客户端close后,服务器端做出响应,杀掉服务器对应的子进程?
...全文
171
13
打赏
收藏
unix下,多进程socket 服务器问题
本人没做过unix下socket的开发,现要做一个多进程socket服务器,请各位大侠帮忙。。 任务要求:控制子进程数为10个,一个子进程对应一个客户端连接socket,响应客户端请求信息(根据请求信息查询服务器的log文件),进行信息交互。 问题:1、子进程数通过一个变量计数控制,还是有别的典型方法? 2、如何做到当客户端close后,服务器端做出响应,杀掉服务器对应的子进程?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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--)。
UNIX
网络编程卷1(第三版)源代码
UNIX
网络编程卷1:套接字联网API(第三版)所有源代码。
Linux下
Socket
编程利用
多进程
实现一台
服务器
与多台客户端并发通信
前些日子同“Linux应用编程”专栏中发布过的TCP及UDP在Linux或Windows下的通信都为单进程下的
Socket
编程,若还存在一些套接字相关函数模糊不清,读者可移步“
Socket
编程下tcp通信”和“
Socket
编程下udp通信”重温学习。本篇则是对以上俩篇的一个简单提升运用,或者说是对以后多线程/进程工作的简单示例。PF_INET 和 AF_INET 的区别:在Windows中,AF_INET与PF_INET完全一样,而在
Unix
/Linux系统中,在不同的版本中这两者有微小差别。
macOS跨进程通信:
Unix
Domain
Socket
创建实例
Socket
是 网络传输的抽象概念。一般我们常用的有Tcp
Socket
和UDP Scoket, 和类
Unix
系统(包括Mac)独有的(UDX)。Tcp
Socket
能够跨电脑进行通信,即使是在同一个电脑下的
多进程
间通信,也会通过网卡进行数据传输,如果本地网卡的环回网络被禁用, 则会导致通信失败。,使用的是Liunx 系统中万物皆文件的概念,和有名管道的操作差不多,都是在文本创建一个特有的文件,用来在两个进程间通信,两个进程分别写入和读取文件流中的数据,达到传输的目的。和Tcp
Socket
。
TCP/IP
Socket
和
UNIX
Socket
区别
Postgres的一位核心开发者曾经做过实验,证明
UNIX
Socket
的方式比TCP/IP
Socket
方式要快31%,TCP/IP
Socket
是网络上不同
服务器
之间进程的通信机制,也可以让同一
服务器
的不同进程通信。0 grpc-go、protobuf、multus-cni 技术专栏 总入口。4 grpc、oauth2、openssl、双向认证、单向认证等专栏文章目录。所以,在同一个
服务器
上应该优先选择
UNIX
Socket
方式。
UNIX
Socket
是同一台
服务器
上不同进程间的通信机制。...
Linux
Unix
domain
socket
详解
Linux
Unix
domain
socket
详解
Linux/Unix社区
23,217
社区成员
74,540
社区内容
发帖
与我相关
我的任务
Linux/Unix社区
Linux/Unix社区 应用程序开发区
复制链接
扫一扫
分享
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章