WvStreams
|
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 }