7 #include "wvistreamlist.h"
8 #include "wvunixlistener.h"
9 #include "wvunixsocket.h"
10 #include "wvstringmask.h"
11 #include "wvmoniker.h"
12 #include "wvlinkerhack.h"
19 # include <sys/types.h>
30 # include <sys/stat.h>
33 # include <sys/socket.h>
39 # include <netinet/in.h>
42 # if HAVE_NETINET_IN_SYSTM_H
43 # include <netinet/in_systm.h>
45 # include <netinet/ip.h>
47 #if HAVE_NETINET_TCP_H
48 # include <netinet/tcp.h>
72 l->
addwrap(wv::bind(&IWvStream::create, wrapper, _1));
82 if (b.peekch() ==
':')
88 l->
addwrap(wv::bind(&IWvStream::create, wrapper, _1));
108 setfd(socket(PF_UNIX, SOCK_STREAM, 0));
116 fcntl(
getfd(), F_SETFD, FD_CLOEXEC);
117 fcntl(
getfd(), F_SETFL, O_RDWR|O_NONBLOCK);
119 sockaddr *sa = addr.sockaddr();
120 if (connect(
getfd(), sa, addr.sockaddr_len()) < 0)
130 WvUnixConn::~WvUnixConn()
146 WvUnixListener::WvUnixListener(
const WvUnixAddr &_addr,
int create_mode)
164 sockaddr *sa = addr.sockaddr();
165 size_t salen = addr.sockaddr_len();
167 if (connect(
getfd(), sa, salen) == 0)
176 oldmask = umask(0777);
177 umask(oldmask | ((~create_mode) & 0777));
181 if (bind(
getfd(), sa, salen) || listen(
getfd(), 50))
193 WvUnixListener::~WvUnixListener()
199 void WvUnixListener::close()
216 struct sockaddr_un saun;
217 socklen_t len =
sizeof(saun);
219 if (!
isok())
return NULL;
221 int newfd =
::accept(getfd(), (
struct sockaddr *)&saun, &len);
224 else if (errno == EAGAIN || errno == EINTR)
240 list->append(conn,
true,
"WvUnixConn");