49 lines
891 B
C
49 lines
891 B
C
//
|
|
// Unix Domain Socket (UDS) Server
|
|
//
|
|
|
|
#include "netlib.h"
|
|
#include <sys/un.h>
|
|
|
|
int uds_server( const char *file )
|
|
{
|
|
unsigned int s;
|
|
struct sockaddr_un local;
|
|
int len;
|
|
|
|
// socket
|
|
s = socket(AF_UNIX, SOCK_STREAM, 0);
|
|
if (s < 0)
|
|
{
|
|
log_error("uds_server");
|
|
return -1;
|
|
}
|
|
|
|
// bind
|
|
local.sun_family = AF_UNIX; /* local is declared before socket() ^ */
|
|
strcpy(local.sun_path, file);
|
|
unlink(local.sun_path);
|
|
len = strlen(local.sun_path) + sizeof(local.sun_family);
|
|
if (bind(s, (struct sockaddr *)&local, len) < 0) {
|
|
close(s);
|
|
log_error("uds_server");
|
|
return -1;
|
|
}
|
|
|
|
// listen
|
|
if (listen(s, 10) < 0) {
|
|
close(s);
|
|
log_error("uds_server");
|
|
}
|
|
|
|
return s;
|
|
}
|
|
|
|
int uds_accept( const int s )
|
|
{
|
|
struct sockaddr_un remote;
|
|
socklen_t len = sizeof(struct sockaddr_un);
|
|
int s2 = accept(s, (struct sockaddr *)&remote, &len);
|
|
return s2;
|
|
}
|