helo

saya sedang membuat program server chat untuk tugas kuliah ipc, jadi
nggak boleh pake thread (kode ada di bawah).
implementasinya setiap satu client di layani oleh satu proses server anak,
yang di fork() oleh proses parent yang selalu meng-accept() koneksi baru
dalam loop.
Proses2 server (child) tersebut saling berkomunikasi dengan shared memory.
yang menjadi masalah... bagaimana cara 'memberitahu' proses2 tersebut
bahwa ada data baru pada shared memory yang harus segera di kirim ke
socket client... sementara proses tersebut (mungkin) ter-block pada saat
recv().
saat ini saya menggunakan kill() untuk mengirim signal ke semua proses
server untuk menginterupsi blocking.
yang saya tanyakan: ada nggak cara lain yang kira2 lebih 'bersih' (nggak
pake signal segala)


thanks,


---- kode, sorry kalo ada salah.. nggak bawa sourcenya soalnya ----

struct myshareddata {
        char data[MAXBUFF];
        .
        .
        .
} * mydata;

char buff[MAXBUFF];

int clientsock;

void sendnewdata() {
        send(clientsock, mydata->data, ... );
} // sendnewdata

int main () {
        int mysock;

        .
        .
        .
        shmid=shmget(...);
        semid=semget(...);
        for (;;) {
                clientsock=accept(mysock, ... );
                if (!fork()) {
                        signal(SIGUSR1,sendnewdata);
                        mydata=shmat(shmid, 0, ... );
                        for (;;) {
                                recv(clientsock, buff, ... );
                                /* down(semid); */
                                strcpy(mydata->data,buff);
                                /* up(semid); */
                                broadcastsignal(SIGUSR1);
                        } // forever
                } // if
        } // forever
} // main



Beauty, brains, availability, personality; pick any two.
- leo -


--------------------------------------------------------------------------------
Utk berhenti langganan, kirim email ke [EMAIL PROTECTED]
Informasi arsip di http://www.linux.or.id/milis.php3
Pengelola dapat dihubungi lewat [EMAIL PROTECTED]

Kirim email ke