日期:2014-05-16  浏览次数:20623 次

unix父子进程和socket通信
server->accept 

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

------解决方案--------------------
问题1:进程间资源都是独立的,你即使传socket过去子进程他也用不了了。得自己连接了,我建议一开始也应该自己连接。不要使用父进程的连接。
问题2:SIGPIPE这个信号肯定要忽略的,如果你不想堵塞recv的话,我觉得你可以使用非堵塞方式读写。
------解决方案--------------------
引用:
Quote: 引用:

问题1:进程间资源都是独立的,你即使传socket过去子进程他也用不了了。得自己连接了,我建议一开始也应该自己连接。不要使用父进程的连接。
问题2:SIGPIPE这个信号肯定要忽略的,如果你不想堵塞recv的话,我觉得你可以使用非堵塞方式读写。
有没有写过unix的c长连接,这个要两个socket来实现吗

和长连接有个毛关系。