C ++ fork()访问父方法,反之亦然

时间:2016-04-05 10:35:53

标签: c++ multithreading sockets

我有两个这样的对象:

clientsService clserver = clientsService(&clientServerFD,portclientsrv);
techniciansService techserver = techniciansService(&techServerFD,porttechsrv);

它构造了绑定和侦听本地端口所需的一切。 所以要做多线程,我之前只使用fork()来调用调用accept()并保持的对象方法。所以我可以为clserver做两个accept(),为techserver做另一个 if(fork()==0){ //SERVICE THAT ACCEPTS Clients while(1){ int client = server.startService(sockfd); //holds on accept() if(fork()==0){ server.waitForTechnician(client); //holds in loop asking techserver if there is any technician FD to connect to. shutdown(client,2); //when done talking clients shutdowns. exit(0); }else continue; } } else{ //SERVICE THAT ACCEPTS TECH while(1){ int tecnico = techserver.startService(techfd); //holds on accept() if(fork()==0){ techserver.initWork(tecnico); //start to work to later, check in a loop if in server object is a client FD available to connect to. shutdown(tecnico,2); exit(0);//disconnected }else continue; } } 。 问题是:我需要那个技术服务器,它在接受返回连接fd后立即分叉,检查clserver实例以返回客户端fd。

该计划的目标是一个类似聊天的技术支持。我知道,我会在以后确保这些事情,但现在我必须把它付诸实践。

问题如何在其他进程中与另一个实例进行对话?

可以通过fork()引用服务器对象和techserver对象吗?在父服务器上的服务器对象上会注意到对孩子中的techserver对象的更改吗?

我虽然关于信号,但我不清楚如何返回客户fd的价值。 检查是否有客户端正在等待技术人员连接,因此它之后就像tcp代理一样。 使用fork()是正确的方法还是我刚刚被困在这里,因为我没有使用正确的函数和编程逻辑?

代码作为我启动服务程序的一个例子:

@echo on 
For /F  "delims=" %%i in ('cd') Do set currentdir=%%i
SET CLASSPATH=%currentdir%\bin;%currentdir%\lib\poi-3.9.jar;
set JAVA_HOME=C:\Program Files\Java\jre6
SET path=%JAVA_HOME%\bin;%path%;
java com/main/MainRunner
pause

0 个答案:

没有答案