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