Thanks... :)
Sedikit tambahan... ternyata baru bisa berjalan setelah
ditambahkan/dimodif beberapa hal dibawah ini :
// compile pake gcc bukan g++
// socket descriptor ditambah " +1 "
// parameter ke-5 pada select harus tetap menggunakan struct timeval
int CheckConnection(int sockdesc)
{
fd_set fdset; /* dipake oleh select; file descriptor yg perlu di
"check" */
char buf[256]; /* buffer buat read... */
int ret;
struct timeval timeout = { 0, 0 };
FD_ZERO(&fdset);
FD_SET(sockdesc, &fdset); /* anggap socketku adalah socket yg
terkoneksi dengan server */
if(select(sockdesc+1, &fdset, NULL, NULL, &timeout) > 0)
{
printf("select success\n");
if (FD_ISSET(sockdesc, &fdset))
{
/* ada data di socket */
ret = read(sockdesc, buf, 256);
if (ret == 0)
printf("Koneksi terputus. Server ngasih FIN\n"); /* kena
disconnect */
if (ret == -1)
printf("Koneksi terputus. Server ngirim RST\n"); /* server
crash kali? */
if (ret > 0)
printf("Masih ok\n");
return ret;
}
}
else
{
printf("select unsuccess\n");
return 1;
}
}
Andrew Hadinyoto wrote:
Hi,
Nafis Faisal wrote:
ada cara agak repot...
1. bikin daemon yg dengerin setiap FIN(close request) dari server.
atau,
2. mungkin sudah ada system signalling internalnya linux buat deteksi
FIN yang masuk...(yang ini saya ga tau bener2 ada apa gak di c linux)
Bisa dideteksi dengan "select" dan "read" (man select, man read).
Contoh programnya kira2 begini:
fd_set fdset; /* dipake oleh select; file descriptor yg perlu di
"check" */
char buf[256]; /* buffer buat read... */
int ret;
....
FD_ZERO(&fdset);
FD_SET(socketku, &fdset); /* anggap socketku adalah socket yg
terkoneksi dengan server */
select(socketku, &fdset, NULL, NULL, NULL);
if (FD_ISSET(socketku, fdset)) {
/* ada data di socket */
ret = read(socketku, buf, 256);
if (ret == 0)
printf("Koneksi terputus. Server ngasih FIN\n"); /* kena
disconnect */
if (ret == -1)
printf("Koneksi terputus. Server ngirim RST\n"); /* server crash
kali? */
if (ret > 0)
printf("Masih ok\n");
}
Contoh di atas pake select untuk read aja. Select juga bisa untuk
write. Jadi bisa handle read/write beberapa file descriptors tanpa
pake "fork".
Moga2 berguna.
Salam,
Andrew...
--
Berhenti langganan: [EMAIL PROTECTED]
Arsip dan info: http://linux.or.id/milis