unix父子进程和socket通信
server->accept
client->socket,connect 连接上服务器
-->fork() ,子进程拷贝父进程的socket
--->父进程 socket 与server通信,具有检查服务器是否正常的功能,发送心跳包
--->子进程 socket 与server通信,完成正常的交易
模型大概就是这样的,在下愚拙,可能不好理解,还望见谅!
问题:
1.server断开后重启,父进程检测到服务器故障,然后重连,但是连上后父进程可以使用,但是子进程就不能使用了...?这个需要什么技术来解决(我想的是共享内存来传递这个socket,但是我觉得这样做麻烦了),望各位大侠给我建议。
2.发送心跳包采用alarm信号机制,但是该信号会造成recv接受失败,所以我采用的方法是设置SIGPIPE信号的处理方式为忽略。
以上是我的两个问题,希望各位前辈多多指教,在下跪求好技术!!!
------解决方案--------------------问题1:进程间资源都是独立的,你即使传socket过去子进程他也用不了了。得自己连接了,我建议一开始也应该自己连接。不要使用父进程的连接。
问题2:SIGPIPE这个信号肯定要忽略的,如果你不想堵塞recv的话,我觉得你可以使用非堵塞方式读写。
------解决方案--------------------
和长连接有个毛关系。