- key = ftok(DEFAULT_EXEC_PROGRAM, IPC_KEY_ID);
- size = build_hotplugmsg( (struct hotplug_msg**) &pmsg, action, devpath, subsystem, seq);
- msgid = msgget(key, IPC_CREAT);
- if (msgid == -1) {
- dbg("open ipc queue error");
- goto exit;
+ memset(&saddr, 0x00, sizeof(saddr));
+ saddr.sun_family = AF_LOCAL;
+ /* use abstract namespace for socket path */
+ strcpy(&saddr.sun_path[1], UDEVD_SOCK_PATH);
+ addrlen = offsetof(struct sockaddr_un, sun_path) + strlen(saddr.sun_path+1) + 1;
+
+ /* try to connect, if it fails start daemon */
+ retval = connect(sock, (struct sockaddr *) &saddr, addrlen);
+ if (retval != -1) {
+ goto send;
+ } else {
+ dbg("connect failed, try starting daemon...");
+ retval = start_daemon();
+ if (retval == 0) {
+ dbg("daemon started");
+ } else {
+ dbg("error starting daemon");
+ goto exit;
+ }