- 论坛徽章:
- 0
|
帮我解决一下这个Socket问题!急!
对于客户的消息,由于需要进行运算,我单独开进程进行计算,但父进程和子进程在几个地方需要进行通信,程序如下:
- for ( ; ; ) {
- rset = allset; /* structure assignment */
- nready = Select(maxfd+1, &rset, NULL, NULL, NULL);
- if (FD_ISSET(listenfd, &rset)) { /* new client connection */
- clilen = sizeof(cliaddr);
- connfd = Accept(listenfd, (SA *) &cliaddr, &clilen);
- for (i = 0; i < FD_SETSIZE; i++)
- if (client[i] < 0) {
- client[i] = connfd; /* save descriptor */
- break
- }
- if (i == FD_SETSIZE) err_quit("too many clients");
- FD_SET(connfd, &allset); /* add new descriptor to set */
- if (connfd >; maxfd) maxfd = connfd; /* for select */
- if (i >; maxi) maxi = i; /* max index in client[] array */
- if (--nready <= 0) continue; /* no more readable descriptors */
- }
- for (i = 0; i <= maxi; i++) { /* check all clients for data */
- if ( (sockfd = client[i]) < 0) continue;
- if (FD_ISSET(sockfd, &rset)) {
- if ( (n = Readline(sockfd, line, MAXLINE)) == 0) {
- /*4connection closed by client */
- Close(sockfd);
- FD_CLR(sockfd, &allset);
- client[i] = -1;
- }
- else
- {
- if(fork()==0)
- {
- int nSend;
- if( nSend = Writen(sockfd, line, n)==0)
- {
- //我需要把父进程的sockfd关闭,allset数组里清除sockfd,然后客户数组client里对应的成员赋值为-1,
- //即需要进行以下3步操作:
- //1)Close(sockfd);
- //2)FD_CLR(sockfd, &allset);
- //3)client[i] = -1;
- //再此,是使用共享内存好,还是管道或者消息,请高手指点
- }
- }
-
- if (--nready <= 0) break; /* no more readable descriptors */
- }
- }
- } //end of for loop
复制代码
开进程的地方的程序还没完成,如下:
- if(fork()==0)
- {
- int nSend;
- if( nSend = Writen(sockfd, line, n)==0)
- {
- //我需要把父进程的sockfd关闭,allset数组里清除sockfd,然后客户数组client里对应的成员赋值为-1,
- //即需要进行以下3步操作:
- //1)Close(sockfd);
- //2)FD_CLR(sockfd, &allset);
- //3)client[i] = -1;
- //再此,是使用共享内存好,还是管道或者消息,请高手指点
- }
- }
- [code]
- 使用哪种方式好,请高手指点!!
- ---------------------------
- 革命尚未成功,同志还需努力!
复制代码 |
|