05-13-05 01:05 PM
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
~
[ Post a follow-up to this message ]
|