linux-c-programming.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* Re: Socket programming
@ 2009-03-22 13:31 Ardhan Madras
  2009-03-22 13:41 ` Volker Kokula
  2009-03-22 15:24 ` Canaan Kao
  0 siblings, 2 replies; 13+ messages in thread
From: Ardhan Madras @ 2009-03-22 13:31 UTC (permalink / raw)
  To: Canaan Kao; +Cc: linux-c-programming

Dear Canaan,

Thanks for your reply. It's a great clue :)
btw, i have one more question... 

In the receiver, do i need to allocate for example
bar->name member manually? or it's done by recv() ?


--- canaan.kao@gmail.com wrote:

From:	Canaan Kao <canaan.kao@gmail.com>
To:	ajhwb@knac.com
Cc:	linux-c-programming@vger.kernel.org
Subject: Re: Socket programming
Date:	Sun, 22 Mar 2009 21:00:14 +0800

Dear Ardhan,

You can add a mySize data member in struct foo.

struct foo
 {
  unsigned mySize;
  char *name;
  char *pix;
  int id;
 };


 struct foo *bar = malloc (sizeof(struct foo));

 if(NULL!=bar)bar->mySize=sizeof(struct foo);

 /* fill the structure, then send */

Finally, your receiver will get the size of foo in the beginning of the stream.

Best regards,
Canaan

On Sun, Mar 22, 2009 at 8:42 PM, Ardhan Madras <ajhwb@knac.com> wrote:
> Hi All,
>
> I was written small network utility in Linux 2.6, glibc 2.7.
> I have been using send() and recv() system call in SOCK_STREAM
> to send or receive fixed size data. for example, i write my data
> structure like this:
>
> struct foo
> {
>  char name[16];
>  char pix[1024];
>  int id;
> } bar;
>
> If i want to send or receive data i just call
>
> send (socket, &bar, sizeof(struct foo), 0);
>
> or to receive:
> recv (socket, &bar, sizeof(struct foo), 0);
>
> My problem is how to receive dynamic sized data? for
> example this structure:
>
> struct foo
> {
>  char *name;
>  char *pix;
>  int id;
> }
>
> struct foo *bar = malloc (sizeof(struct foo));
> /* fill the structure, then send */
>
> How to receive the data? since there are no way
> to the receiver to know data sizes?
>
> Thanks for your help.
>
>
> _____________________________________________________________
> Listen to KNAC, Hit the Home page and Tune In Live! ---> http://www.knac.com
> --
> To unsubscribe from this list: send the line "unsubscribe linux-c-programming" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>
--
To unsubscribe from this list: send the line "unsubscribe linux-c-programming" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html




_____________________________________________________________
Listen to KNAC, Hit the Home page and Tune In Live! ---> http://www.knac.com

^ permalink raw reply	[flat|nested] 13+ messages in thread
* Re: Socket programming
@ 2009-03-23 15:03 Ardhan Madras
  0 siblings, 0 replies; 13+ messages in thread
From: Ardhan Madras @ 2009-03-23 15:03 UTC (permalink / raw)
  To: Glynn Clements; +Cc: linux-c-programming

In the glibc man about send() and recv(), it says:

" The only difference between send() and write() is the presence of flags.  
  With zero  flags parameter,  send()  is equivalent to write(). ..."

--- ajhwb


--- glynn@gclements.plus.com wrote:

Apart from the comments which have already been made:

There's no reason to use send() and recv() if the flags argument is
zero. You may as well use read() and write(). Or convert the
descriptor to a FILE* with fdopen() and use fread() and fwrite().

-- 
Glynn Clements <glynn@gclements.plus.com>




_____________________________________________________________
Listen to KNAC, Hit the Home page and Tune In Live! ---> http://www.knac.com

^ permalink raw reply	[flat|nested] 13+ messages in thread
* Re: Socket programming
@ 2009-03-22 15:47 Ardhan Madras
  0 siblings, 0 replies; 13+ messages in thread
From: Ardhan Madras @ 2009-03-22 15:47 UTC (permalink / raw)
  To: linux-c-programming

Thanks to Canaan Kao and Volker Kokula for sharing their knowledge.

Ardhan Madras.

_____________________________________________________________
Listen to KNAC, Hit the Home page and Tune In Live! ---> http://www.knac.com

^ permalink raw reply	[flat|nested] 13+ messages in thread
* Re: Socket programming
@ 2009-03-22 14:08 Ardhan Madras
  2009-03-22 15:04 ` Volker Kokula
  0 siblings, 1 reply; 13+ messages in thread
From: Ardhan Madras @ 2009-03-22 14:08 UTC (permalink / raw)
  To: Volker Kokula; +Cc: linux-c-programming

Hi Volker,

Thanks for let me know. actually, there are no security 
concerns in my program. What do you means with 'unportable?' 
do you means CPU bit type? like integer size?, i want to 
learn socket programming, so i must understand it from scratch, 
not simply by using a library wrapper.


--- kokula@informatik.uni-wuerzburg.de wrote:

From: Volker Kokula <kokula@informatik.uni-wuerzburg.de>
To: ajhwb@knac.com
CC: linux-c-programming@vger.kernel.org
Subject: Re: Socket programming
Date: Sun, 22 Mar 2009 14:41:22 +0100

Hi Ardhan,


you're going to write an enterly unportable and insecure program. If you 
want just send a structure from one host to another look for a library 
which does the packing and unpacking over the network for you.

For example json-c [1] or csoap [2]


Volker



[1] http://oss.metaparadigm.com/json-c/
[2] http://sourceforge.net/projects/csoap/




_____________________________________________________________
Listen to KNAC, Hit the Home page and Tune In Live! ---> http://www.knac.com

^ permalink raw reply	[flat|nested] 13+ messages in thread
* Socket programming
@ 2009-03-22 12:42 Ardhan Madras
  2009-03-22 13:00 ` Canaan Kao
                   ` (2 more replies)
  0 siblings, 3 replies; 13+ messages in thread
From: Ardhan Madras @ 2009-03-22 12:42 UTC (permalink / raw)
  To: linux-c-programming

Hi All,

I was written small network utility in Linux 2.6, glibc 2.7.
I have been using send() and recv() system call in SOCK_STREAM
to send or receive fixed size data. for example, i write my data 
structure like this:

struct foo
{
  char name[16];
  char pix[1024];
  int id;
} bar;

If i want to send or receive data i just call

send (socket, &bar, sizeof(struct foo), 0);

or to receive:
recv (socket, &bar, sizeof(struct foo), 0);

My problem is how to receive dynamic sized data? for 
example this structure:

struct foo
{
  char *name;
  char *pix;
  int id;
}

struct foo *bar = malloc (sizeof(struct foo));
/* fill the structure, then send */

How to receive the data? since there are no way
to the receiver to know data sizes?

Thanks for your help.


_____________________________________________________________
Listen to KNAC, Hit the Home page and Tune In Live! ---> http://www.knac.com

^ permalink raw reply	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2009-03-26 21:58 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-03-22 13:31 Socket programming Ardhan Madras
2009-03-22 13:41 ` Volker Kokula
2009-03-22 15:24 ` Canaan Kao
2009-03-26 21:42   ` Anil Vishnoi
  -- strict thread matches above, loose matches on Subject: below --
2009-03-23 15:03 Ardhan Madras
2009-03-22 15:47 Ardhan Madras
2009-03-22 14:08 Ardhan Madras
2009-03-22 15:04 ` Volker Kokula
2009-03-22 12:42 Ardhan Madras
2009-03-22 13:00 ` Canaan Kao
2009-03-22 18:39 ` Jon Mayo
2009-03-26 21:58   ` Anil Vishnoi
2009-03-23  9:18 ` Glynn Clements

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).