WvStreams
wvloopback.cc
00001 /*
00002  * Worldvisions Weaver Software:
00003  *   Copyright (C) 1997-2002 Net Integration Technologies, Inc.
00004  * 
00005  * Implementation of the WvLoopback stream.  WvLoopback uses a
00006  * socketpair() to create a stream that allows you to read()
00007  * everything written to it, even (especially) across a fork() call.
00008  */
00009 #include "wvloopback.h"
00010 #include "wvsocketpair.h"
00011 #include "wvmoniker.h"
00012 #include "wvlinkerhack.h"
00013 
00014 WV_LINK(WvLoopback);
00015 
00016 static IWvStream *create_loopback(WvStringParm, IObject *)
00017 {
00018     return new WvLoopback();
00019 }
00020 
00021 static WvMoniker<IWvStream> reg("loop",  create_loopback);
00022 
00023 
00024 WvLoopback::WvLoopback()
00025 {
00026     int socks[2];
00027     
00028     if (wvsocketpair(SOCK_STREAM, socks))
00029     {
00030         seterr(errno);
00031         return;
00032     }
00033     
00034     rfd = socks[0];
00035     wfd = socks[1];
00036 
00037     set_close_on_exec(true);
00038     set_nonblock(true);
00039 }