> 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

Kirim email ke