#include #include #include #include #include #include #include #define UNIX_PATH_MAX 128 int UClient(const char *sockname) { int sockfd; struct sockaddr_un addr; int rc; if (sockname == NULL || strlen(sockname) > UNIX_PATH_MAX) { printf("Invalid sockname\n"); return (-1); } sockfd = socket(AF_UNIX, SOCK_STREAM, 0); if (sockfd < 0) { printf("socket error: %s\n", strerror(errno)); return (-1); } memset(&addr, 0, sizeof(addr)); addr.sun_family = AF_UNIX; memcpy(addr.sun_path, sockname, strlen(sockname)); if (connect(sockfd, (struct sockaddr*) &addr, sizeof(addr)) < 0) { printf("connect error: %s\n", strerror(errno)); close(sockfd); return (-1); } return (sockfd); } int UServer(const char *sockname) { int sockfd; struct sockaddr_un addr; if (sockname == NULL || strlen(sockname) > UNIX_PATH_MAX) { printf("Invalid sockname\n"); return (-1); } unlink(sockname); sockfd = socket(AF_UNIX, SOCK_STREAM, 0); if (sockfd < 0) { printf("socket error: %s\n", strerror(errno)); return (-1); } memset(&addr, 0, sizeof(addr)); addr.sun_family = AF_UNIX; memcpy(addr.sun_path, sockname, strlen(sockname)); if (bind(sockfd, (struct sockaddr *) &addr, sizeof(addr)) == 0) { if (listen(sockfd, 5) == 0) return (sockfd); } close(sockfd); printf("connect error: %s\n", strerror(errno)); return (-1); } /* end of file */