1 #include <unistd.h>
2 #include <sys/types.h>
3 #include <sys/socket.h>
4 #include <sys/un.h>
5 #include "error.h"
6 #include "byte.h"
7 #include "str.h"
8 #include "ipc.h"
9 #include "ipcpath.h"
10
ipc_bindit(int s,const char * p,int del)11 static int ipc_bindit(int s,const char *p,int del)
12 {
13 struct sockaddr_un sa;
14 unsigned int l;
15
16 l = str_len(p);
17 if (l > IPCPATH_MAX) {
18 errno = error_proto;
19 return -1;
20 }
21 byte_zero((char *) &sa,sizeof sa);
22 sa.sun_family = AF_UNIX;
23 byte_copy(sa.sun_path,l,p);
24 if (del) unlink(sa.sun_path);
25 return bind(s,(struct sockaddr *) &sa,sizeof sa);
26 }
27
ipc_bind(int s,const char * p)28 int ipc_bind(int s,const char *p)
29 {
30 return ipc_bindit(s,p,0);
31 }
32
ipc_bind_reuse(int s,const char * p)33 int ipc_bind_reuse(int s,const char *p)
34 {
35 return ipc_bindit(s,p,1);
36 }
37