*BSD News Article 10369


Return to BSD News archive

Received: by minnie.vk1xwt.ampr.org with NNTP
	id AA7842 ; Tue, 26 Jan 93 20:00:22 EST
Path: sserve!manuel.anu.edu.au!munnari.oz.au!sgiblab!spool.mu.edu!olivea!uunet!ddssuprs!lpc
From: lpc@dickens.com (Luis P Caamano)
Newsgroups: comp.unix.bsd
Subject: Re: Problem to transfer large data via socket communication - Need Help
Message-ID: <1993Jan25.193306.22638@dickens.com>
Date: 25 Jan 93 19:33:06 GMT
References: <1993Jan8.071612.13716@news.uni-stuttgart.de> <1829@igd.fhg.de>
Organization: Dickens Data Systems, Inc.
Lines: 33

In article <1829@igd.fhg.de> mike@igd.fhg.de (Mike Sokolewizc (Gast)) writes:
>>  we develope a program with socket communication. We have large
>>  datas to transfer. So we use the following routines
>>  to send data from socket to socket (stream):
>>
>>        write(socket,(char*)data,buffer)
>>        read(socket,(char*)data,buffer)
>>
>>  But now we've problems sending/receiving large data for
>>  example 50*50*50 matrix of floats or larger. Is there any
>>     Oliver
>
>the system gives you only exactly what's waiting at that socket at that instant, even if more
>data is coming.  Therefore, you have to nest the read() within a loop and keep reading until
>you get an error or the expected number of bytes:
>
>  num_read = 0;
>  do
>    {
>      l = read( socket, &buffer[num_read], BUF_SIZE - num_read );
>      num_read += l;
>    }
>  while ( (num_read < BUF_SIZE) && (l > 0) );
>

Same thing applies for write() over a socket descriptor.

-- 
Luis P. Caamano                        |         lpc@dickens.com
Dickens Data Systems, Inc. Atlanta, GA |         uunet!dickens.com!lpc
---------------------------------------------------------------------------
If I think I know it all, I'll stop learning. -myself
The more I learn, the more I know I know nothing. -somebody else