> 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