多个父子进程都写同一个socket会不会有问题?

ashamwolf 2005-09-14 02:58:23
父进程建立一个socket连接,然后循环读取数据,收到数据之后产生一个子进程来处理数据,然后继续接收数据。子进程处理完数据之后要向socket写回复消息,如果多个子进程同时写数据会有什么问题?
...全文
578 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
tukey 2005-09-18
  • 打赏
  • 举报
回复
up
immc1979 2005-09-18
  • 打赏
  • 举报
回复
在子进程写的时候,创建一个临界区,一次只允许一个在写,写完以后释放

------------------------

应该这样,不然会出现混乱,毕竟是一个SOCKET套接字,属于临界资源,要是出现双方同时在read就死锁了
alaiyeshi 2005-09-16
  • 打赏
  • 举报
回复
在子进程写的时候,创建一个临界区,一次只允许一个在写,写完以后释放
ashamwolf 2005-09-15
  • 打赏
  • 举报
回复
好像有个地方没说清楚,我的程序不是做服务器,而是客户端。主进程发起连接,每次收到数据后创建一个子进程来处理数据。
hundlom 2005-09-15
  • 打赏
  • 举报
回复
这是server 中经典的设计模式。没有问题
多个子进程同时写,但写的是不同的id。没问题。
wind123 2005-09-15
  • 打赏
  • 举报
回复
没有问题的,需要注意的应该是数据的顺序要求
yyy790601 2005-09-15
  • 打赏
  • 举报
回复
tcp协议能保证的。
ashamwolf 2005-09-15
  • 打赏
  • 举报
回复
如果每个进程只调用一次write可能不会有问题,但是现在是在循环里面调用了多次,所以不知道会有什么后果。
bugebear3 2005-09-15
  • 打赏
  • 举报
回复
感觉上有点问题
ashamwolf 2005-09-15
  • 打赏
  • 举报
回复
下面的情况会不会有问题:

假如有两个子进程都要向socket写东西,第一个子进程要执行3次write函数才能将一个回复消息写完,并且在执行第2次write之后该进程时间片用完,轮到下一个子进程执行,那么在对方收到的数据中,第一个子进程返回的数据里面会不会混有第二个子进程写入的数据?
sharkhuang 2005-09-15
  • 打赏
  • 举报
回复
没问题 进程复制文件句柄
ashamwolf 2005-09-14
  • 打赏
  • 举报
回复
具体情况是这样的:
每个子进程在处理完数据之后会向socket写回一串字符,只写一串,字符数不会超过1024,在程序里就是一个循环,在循环里调用write直到把整个字符串写完。
每个子进程回复的顺序没有要求,只要各个子进程发送的字符串能原样到达就行了,也就是几个子进程回复的字符串不要混在一起。不知道操作系统能不能保证这一点。
gaoxianfeng 2005-09-14
  • 打赏
  • 举报
回复
这就相当于你多个进程打开一个文件 读写
nahuat 2005-09-14
  • 打赏
  • 举报
回复
物理上不会有问题,数据都将被正确传送
逻辑上有问题,收发会乱序,除非你有机制确保在某个时间点上由谁来收发,同时进行是不行的
yyy790601 2005-09-14
  • 打赏
  • 举报
回复
如果在子进程产生前创建的socket,子进程就可以用这个socket。

至于多个socket连接道一个端口的问题。那是传输层协议处理的事情,我们只负责应用层的合理设计就够了。就象一个ftp服务器,大家都连接的是它的21端口,具体怎么处理它自己知道。
ashamwolf 2005-09-14
  • 打赏
  • 举报
回复
产生子进程的时候,每个子进程都会复制一个socket的相关资源吗?比如读和写的缓冲区。如果这样不是多个socket都连接到对方的一个端口上了?
yyy790601 2005-09-14
  • 打赏
  • 举报
回复
没任何问题。

进程间完全可以传递并使用文件描述符。

23,118

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧