Unix Programming - Pipes vs Socket Pairs

This is Interesting: Free IT Magazines  
Home > Archive > Unix Programming > May 2005 > Pipes vs Socket Pairs





You are viewing an archived Text-only version of the thread. To view this thread in it's original format and/or if you want to reply to this thread please [click here]

Author Pipes vs Socket Pairs
grid

2005-05-13, 8:05 am

Hi,
I was reading a text on IPC's and found this detail

"You can view socketpairs as an extension of pipes. Where a pipe can be
viewed as a pair of connected sockets for one-way stream communication,
a socketpair can be viewed as a pair of connected sockets for two-way
stream communication."

I suppose pipes are also bidirectional and can be used in place of
socketpairs.I tried running a program and it works fine :
-----
#define DATA1 "In Xanadu, did Kublai Khan..."
#define DATA2 "A stately pleasure dome decree..."

main()
{
int sockets[2], child;
char buf[1024];

if (socketpair(AF_UNIX, SOCK_STREAM, 0, sockets) < 0) {
perror("opening stream socket pair");
exit(1);
}
/* Replaced the above 4 lines with below code for pipes
* if (pipe(sockets) < 0) {
* perror("opening stream socket pair");
* exit(1);
* }
*/
if ((child = fork()) == -1)
perror("fork");
else if (child) { /* This is the parent. */
close(sockets[0]);
if (read(sockets[1], buf, sizeof(buf)) < 0)
perror("reading stream message");
printf("-->%s\n", buf);
if (write(sockets[1], DATA2, sizeof(DATA2)) < 0)
perror("writing stream message");
close(sockets[1]);
} else { /* This is the child. */
close(sockets[1]);
if (write(sockets[0], DATA1, sizeof(DATA1)) < 0)
perror("writing stream message");
if (read(sockets[0], buf, sizeof(buf)) < 0)
perror("reading stream message");
printf("-->%s\n", buf);
close(sockets[0]);
}
}

Can anyone comment on this ? Of course it can get a bit messy if we try
to use the same pipe , so its always cleaner to have 2 pipes before the
fork.But then again , socket pairs will also have the same problems.
Are socket pairs used as extensively as pipes ?

TIA
~
Patrick Plattes

2005-05-13, 8:05 am

hi

grid wrote:
> I suppose pipes are also bidirectional and can be used in place of
> socketpairs.I tried running a program and it works fine :


not for me:

patrick@Dragon:~/studium/informatik/sys/pipe$ ./pipe
writing stream message: Bad file descriptor
reading stream message: Bad file descriptor
-->D
patrick@Dragon:~/studium/informatik/sys/pipe$ -->A stately pleasure dome
decree...

[ Linux version 2.6.12-rc4 (root@Dragon) (gcc version 3.3.5 (Debian
1:3.3.5-12)) ]

have a nice day,
patrick
Jens.Toerring@physik.fu-berlin.de

2005-05-13, 8:05 am

grid <prohit99@gmail.com> wrote:
> I was reading a text on IPC's and found this detail


> "You can view socketpairs as an extension of pipes. Where a pipe can be
> viewed as a pair of connected sockets for one-way stream communication,
> a socketpair can be viewed as a pair of connected sockets for two-way
> stream communication."


> I suppose pipes are also bidirectional and can be used in place of
> socketpairs.I tried running a program and it works fine :


Some systems have bidirectional pipes, so on these it will work - and
yours seems to be one of them. But you can't rely on that always being
the case. So if you want to be sure the program is going to work on all
systems you better restrict yourself to using pipes only in a single
direction.
Regards, Jens
--
\ Jens Thoms Toerring ___ Jens.Toerring@physik.fu-berlin.de
\__________________________ http://www.toerring.de
Casper H.S. Dik

2005-05-14, 1:23 pm

Patrick Plattes <newsgroup@erdbeere.net> writes:

>hi


>grid wrote:
[vbcol=seagreen]
>not for me:


>patrick@Dragon:~/studium/informatik/sys/pipe$ ./pipe
>writing stream message: Bad file descriptor
>reading stream message: Bad file descriptor


System Vr4 pipes are bidirectional.

Casper
--
Expressed in this posting are my opinions. They are in no way related
to opinions held by my employer, Sun Microsystems.
Statements on Sun products included here are not gospel and may
be fiction rather than truth.
James Antill

2005-05-14, 1:23 pm

On Fri, 13 May 2005 17:26:28 +0530, grid wrote:

> Hi,
> I was reading a text on IPC's and found this detail
>
> "You can view socketpairs as an extension of pipes. Where a pipe can be
> viewed as a pair of connected sockets for one-way stream communication,
> a socketpair can be viewed as a pair of connected sockets for two-way
> stream communication."


This is a bad description, sockets obey "man 7 socket" pipes do not. The
fact pipes are also unidirectional can be the least of your worries.

--
James Antill -- james@and.org
http://www.and.org/vstr/httpd

Sponsored Links






Free braindumps | Software forum | Database administration forum

Copyright 2003 - 2008 webservertalk.com