Denni Pidono wrote:
> 
> >bisa pake select(), masukkan handle socket dan handle nol (stdin) ke
> >fd_set untuk read. Atau bisa juga pake multithread, thread yg. satu
> >menunggu user input, thread yg. lain membaca keyboard.
> >
> >tapi cara di atas cumak bisa kalau user menekan tombol ENTER setelah
> >menginput kalimat.
> 
> bukankah sewaktu user diminta inputan program berhenti utk menunggu
> inputan? lalu bagaimana bisa menerima message dari server sementara program
> berhenti utk menerima inputan dr user?
> 

justru itu kegunaan fungsi select().
ini saya kutip dari 'man select':

DESCRIPTION
       select  waits  for  a number of file descriptors to change
       status

jadi caranya kita masukkan handle (file deskriptor) dari socket dan
handle dari stdin (yaitu nol) ke fungsi select() itu, nanti fungsi
select() akan nge-block sampai ada message dari server atau kalau ada
inputan dari user, tergantung dari mana yg. datang duluan.

ini cuplikan kode sederhana:

int get_data(int sock_fd)
{
        fd_set rf;

        FD_ZERO(&rf);

        FD_SET(sock_fd, &rf);
        FD_SET(0, &rf);

        if (select(2, &rf, NULL, NULL, NULL) < 1)
                return -1;

        if (FD_ISSET(sock_fd, &rf)) {
                puts("dapat data dari socket");
                /* read() socket di sini */

        } else if (FD_ISSET(0, &rf)) {
                puts("dapat data dari stdin");
                /* gets() atau fgets() di sini */
        }
        return 0;
}

alternatif yg. lain yaitu pake dua thread.
thread yg. pertama akan menunggu input dari keyboard, dan thread yg.
kedua akan menunggu message dari server. Tapi pemrograman thread ini
lebih sulit memang, karena kedua thread harus sinkron. Jadi menurut
saya sih lebih baik pakai select() itu.

-- 
cheers,
Bennylp

--------------------------------------------------------------------------------
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