> Halo, > > On Thu, May 13, 2004 at 09:03:29PM +0700, iin wrote: >> >> Ada yang pernah membuat program C untuk timeout >> Maksudnya misal kita mengirim pesan ke kompi lain >> dalam selang waktu tertentu tidak jawaban dari kompi tersebut >> baru kita menganggap kompie tersebut mati >> >> saya sudah membuat memakai alarm() >> tetapi pada selang waktu tertentu >> dia akan kembali lagi mengulang kode yang diinterupt dgn alarm >> >> misal : >> signal(SIGALRM, fungsihandler); >> alarm(2) >> recvfrom(.....) >> >> >> ketika sudah 2 detik ia akan ke fungsihandler >> kemudian saya memanggi program lain lewat fungsi handler >> namun tiba-tiba ia kembali lagi ke recvfrom >> >> ketika di 'ltrace' keluar >> <... recvfrom resumed> ) > > recvfrom ini ngeblock. Jadi pas signal handler telah dieksekusi, akan > balik > lagi ke recvfrom dan nerusin blockingnya. > > Ada 2 cara untuk recvfrom nggak nerusin blocking: > 1. Kalo mau pake signal, mesti pake "sigsetjmp", lalu manggil "siglongjmp" > di signal handler. > > Jadi kira2 seperti ini: > ---- > static sigjmp_buf jmpbuffer; > > void fungsihandler(int signum) > { > siglongjmp(jmpbuffer, 1); > return; > } > > int main(void) > { > ... > int timeout = 0; > // akan dipanggil kalo siglongjmp dieksekusi - kayak "goto" > if (sigsetjmp(jmpbuffer, 1) != 0) { > timeout = 1; > } > > if (timeout) > return(1); > signal(SIGALRM, fungsihandler); > alarm(...); > ... > // blocking, tapi pas signal handler dipanggil, sigsetjmp akan > // dieksekusi > recvfrom(...); > ... > } > ---- > > 2. Yg satunya pake socket option "setsockopt" lalu di set timeout value > nya. > > --- > int main(void) > { > ... > > int sock; > struct timeval t; > // set timeout > t.tv_sec = 10; // 10 detik > t.tv_usec = 0; > > ... > > sock = sokcet(...); > // set socket option dengan timeout ot receive > setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO, &t, sizeof(t)); > > ... > > if (recvfrom(...) < 0) > if (errno == EWOULDBLOCK) > // kena timeout > } > > Semoga berguna :) > > Andrew... > >>
Boleh tidak qta menggunakan setsockopt 2 X soalnya setsockoptnya sudah dipakai untuk broadcast. Wasalamu 'alaikum Wr. Wb. ---------------------------------------------- Apa yang hilang darimu pasti ada gantinya Tapi jika 4JJI meninggalkanmu siapa yang akan menggantikan-Nya -- Berhenti langganan: [EMAIL PROTECTED] Arsip dan info: http://linux.or.id/milis.php