Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 7 Nov 2003 09:19:09 -0800
From:      Chris Pressey <cpressey@catseye.mine.nu>
To:        FreeBSD-Questions <freebsd-questions@freebsd.org>
Subject:   [OT?] Tying a socket to stdin/stdout w/dup2() ?
Message-ID:  <20031107091909.6d2a0acc.cpressey@catseye.mine.nu>

next in thread | raw e-mail | index | archive | help
Hi all,

Sorry if this question is a little off topic since it's not strongly
FreeBSD-specific.

I've got a C program that opens a TCP/IP socket and makes a client
connection.  What I'd like to do is to 'tie' the socket to this
program's standard I/O, so that anything that is fed into this program's
stdin, is immediately sent to the socket, and anything that appears on
the socket, is immediately sent out this program's stdout.  (The end
effect being a sort of pathologically simple version of what telnet,
(or inetd or ucspi-tcp) does.)

Trying to figure this out using Google, the best lead I got was to try
something like this:

  fclose(stdin);
  fclose(stdout);
  dup2(sd, 0);
  dup2(sd, 1);

But it doesn't seem to do much good.  (At best, I think this means the
program can communicate with the socket as if it were stdio - but from
the program user's point of view, stdio disappears completely.)

I'd rather not resort to getting my hands dirty with select(2), but I
guess if there's really no other way, I'll have to.

TIA,
-Chris



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20031107091909.6d2a0acc.cpressey>