> > misalnya suatu program ngirim ke socket beberapa kali: > > send(sockfd, buff1, len1); > send(sockfd, buff2, len2); > send(sockfd, buff3, len3); > > inikan nanti dikirim jadi 3 paket sendiri2 > karena rada susah nanganin buffering diaplikasi jadi ngirimnya beberapa > kali > > ada nggak option di socket yang bisa nge-buffer dulu string yang dikirim > biar nanti jadi cuma satu paket yang dikirim >
Process send(...) seperti diatas belum tentu dikirm dalam 3 packet, disisi penerima bisa jadi cuman perlu satu kali recv(...). Tetapi karena hal tersebut tidak bisa dijadikan pegangan maka buffering disisi penerima memang sebuah keharusan. Kalau anda mengirimkan data dalam betuk 'Formatted Text' (misal; ASCII, HTML, dll) maka anda bisa melakukan buffering dan text parsing dengan mencari karakter CR-LF atau LF sebagai tanda satu line text telah diterima. Berikut ini saya coba berikan contoh pseudo-code: char* buff; char* bline; buff = malloc(BUFF_SIZE+1); bline=malloc(MAX_LINESIZE); *(buff + BUFF_SIZE) = 0x0; while (1){ nlen = recv(sockfd, buff, BUFF_SIZE); if (nlen = SOCKET_ERROR) break; for (i=0, idx=0; i < nlen; i++, idx++){ *(bline+idx) = *(buff+i); if (*(buff+i) = { *(bline+idx+1) = 0x0; doprocessline(bline); idx = 0; } } } Semoga bisa membantu. Jagad. -- Utk berhenti langganan, kirim email ke [EMAIL PROTECTED] Informasi arsip di http://www.linux.or.id/milis.php3