shmget(); shmat();//assign "0" to it socket(); bind(); listenfd = listen(); for ( ; ; ) { sockaccepted = accept(); sockconnected = connect_to_thirdparty(); if ( (ret = fork()) == 0) { close(listenfd); rcvproc(sockconnected,sockaccepted); exit(0); } else if(ret >0) { close(sockaccepted); close(sockconnected); } else { exit(0); } if ( (ret = fork()) == 0) { close(listenfd); rcvproc(sockconnected,sockaccepted); exit(0); } else if(ret < 0) { exit(0); } } int rcvproc() { for ( ; ; ) { read(sockaccepted); send(sockconnected); } } int sndproc() { for ( ; ; ) { shmat();//這里連接父進程建立的共享內(nèi)存并判斷其內(nèi)容是否為 "0"如果不是則循環(huán)判斷直到其值為 "0" // 共享內(nèi)存如果值 為 "0" 重新賦值為 "1" read(sockconnected); send(sockaccepted); //共享內(nèi)存重新賦值為 "0" } } |
歡迎光臨 Chinaunix (http://72891.cn/) | Powered by Discuz! X3.2 |