26 #include <sys/types.h>
28 #include <sys/socket.h>
31 #include <sys/ioctl.h>
36 #ifdef HAVE_SYS_FILIO_H
37 #include <sys/filio.h>
42 #include "sd-daemon.h"
68 struct sockaddr_un clnt_addr;
70 clnt_len =
sizeof(clnt_addr);
72 if ((new_sock = accept(
commonSocket, (
struct sockaddr *) &clnt_addr,
75 Log2(PCSC_LOG_CRITICAL,
"Accept on common socket: %s",
80 *pdwClientID = new_sock;
104 struct sockaddr_un un;
110 if ((
commonSocket = socket(PF_UNIX, SOCK_STREAM, 0)) < 0)
112 Log2(PCSC_LOG_CRITICAL,
"Unable to create common socket: %s",
117 memset(&sa, 0,
sizeof sa);
118 sa.un.sun_family = AF_UNIX;
119 strncpy(sa.un.sun_path, PCSCLITE_CSOCK_NAME,
sizeof sa.un.sun_path);
120 (void)
remove(PCSCLITE_CSOCK_NAME);
124 Log2(PCSC_LOG_CRITICAL,
"Unable to bind common socket: %s",
131 Log2(PCSC_LOG_CRITICAL,
"Unable to listen common socket: %s",
139 (void)chmod(PCSCLITE_CSOCK_NAME, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH);
158 if (!sd_is_socket(fd, AF_UNIX, SOCK_STREAM, -1))
160 Log1(PCSC_LOG_CRITICAL,
"Passed FD is not an UNIX socket");
181 #if defined(__NetBSD__) || defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__DragonFly__)
202 selret = select(
commonSocket + 1, &read_fd, (fd_set *) NULL,
216 Log2(PCSC_LOG_CRITICAL,
"Select returns with failure: %s",
230 Log1(PCSC_LOG_DEBUG,
"Common channel packet arrival");
234 "error in ProcessCommonChannelRequest: %d", *pdwClientID);
242 "ProcessCommonChannelRequest detects: %d", *pdwClientID);