summaryrefslogtreecommitdiff
path: root/sys/src/ape/lib/bsd/accept.c
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@gmx.de>2013-03-31 18:52:45 +0200
committercinap_lenrek <cinap_lenrek@gmx.de>2013-03-31 18:52:45 +0200
commitb6dc4ba5a44a2ed2a68266598ceb28b7a7d51af2 (patch)
treeb2af773db48a3606bd078055db925dbba6d4ffaa /sys/src/ape/lib/bsd/accept.c
parent9c7e1db701e0e80b42bb5990e2f6839d712bb984 (diff)
ape: initial IPv6 support, inet_pton()/inet_ntop(), getaddrinfo()/getnameinfo()
Diffstat (limited to 'sys/src/ape/lib/bsd/accept.c')
-rw-r--r--sys/src/ape/lib/bsd/accept.c30
1 files changed, 12 insertions, 18 deletions
diff --git a/sys/src/ape/lib/bsd/accept.c b/sys/src/ape/lib/bsd/accept.c
index 483e4c6ed..4f6203652 100644
--- a/sys/src/ape/lib/bsd/accept.c
+++ b/sys/src/ape/lib/bsd/accept.c
@@ -20,7 +20,6 @@ accept(int fd, void *a, int *alen)
{
int n, nfd, cfd;
Rock *r, *nr;
- struct sockaddr_in *ip;
char name[Ctlsize];
char file[8+Ctlsize+1];
char *p, *net;
@@ -33,6 +32,7 @@ accept(int fd, void *a, int *alen)
switch(r->domain){
case PF_INET:
+ case PF_INET6:
switch(r->stype){
case SOCK_DGRAM:
net = "udp";
@@ -40,41 +40,35 @@ accept(int fd, void *a, int *alen)
case SOCK_STREAM:
net = "tcp";
break;
+ case SOCK_RDM:
+ net = "il";
+ break;
}
/* get control file name from listener process */
n = read(fd, name, sizeof(name)-1);
- if(n <= 0){
- _syserrno();
+ if(n <= 0)
return -1;
- }
name[n] = 0;
cfd = open(name, O_RDWR);
- if(cfd < 0){
- _syserrno();
+ if(cfd < 0)
return -1;
- }
nfd = _sock_data(cfd, net, r->domain, r->stype, r->protocol, &nr);
- if(nfd < 0){
- _syserrno();
+ if(nfd < 0)
return -1;
- }
if(write(fd, "OK", 2) < 0){
close(nfd);
- _syserrno();
return -1;
}
-
/* get remote address */
- ip = (struct sockaddr_in*)&nr->raddr;
- _sock_ingetaddr(nr, ip, &n, "remote");
- if(a){
- memmove(a, ip, sizeof(struct sockaddr_in));
- *alen = sizeof(struct sockaddr_in);
+ _sock_ingetaddr(nr, &nr->raddr, &n, "remote");
+ if(a != 0){
+ if(n > 0)
+ memmove(a, &nr->raddr, n);
+ *alen = n;
}
-
return nfd;
case PF_UNIX:
if(r->other >= 0){