static int createSocket()
{
  int         sockfd;
  ksocklen_t  addrlen;
  struct stat s;
  const char  *sock =getSockName(qt_xdisplay());
  int         stat_err=lstat(sock, &s);

printf("USING SOCKET :%s:\n", sock);
  if(!stat_err && S_ISLNK(s.st_mode))
    {
    kdWarning() << "Someone is running a symlink attack on you\n";
    if(unlink(sock))
        {
      kdWarning() << "Could not delete symlink\n";
      return -1;
    }
  }

  if (!access(sock, R_OK|W_OK))
  {
    KDEsuClient client;
    if (client.ping() == -1)
    {
      kdWarning() << "stale socket exists\n";
      if (unlink(sock))
      {
        kdWarning() << "Could not delete stale socket\n";
        return -1;
      }
    }
        else
    {
      kdWarning() << "kdesud is already running\n";
      return -1;
    }

  }

  sockfd = socket(PF_UNIX, SOCK_STREAM, 0);
  if (sockfd < 0)
  {
    kdError() << "socket(): " << ERR << "\n";
    return -1;
  }

  struct sockaddr_un addr;
  addr.sun_family = AF_UNIX;
  strncpy(addr.sun_path, sock, sizeof(addr.sun_path)-1);
  addr.sun_path[sizeof(addr.sun_path)-1] = '\000';
  addrlen = SUN_LEN(&addr);
  if (bind(sockfd, (struct sockaddr *)&addr, addrlen) < 0)
  {
    kdError() << "bind(): " << ERR << "\n";
    return -1;
  }

  struct linger lin;
  lin.l_onoff = lin.l_linger = 0;
  if (setsockopt(sockfd, SOL_SOCKET, SO_LINGER, (char *) &lin,
         sizeof(linger)) < 0)
  {
    kdError() << "setsockopt(SO_LINGER): " << ERR << "\n";
    return -1;
  }

  int opt = 1;
  if (setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, (char *) &opt,
         sizeof(opt)) < 0)
  {
    kdError() << "setsockopt(SO_REUSEADDR): " << ERR << "\n";
    return -1;
  }
  opt = 1;
  if (setsockopt(sockfd, SOL_SOCKET, SO_KEEPALIVE, (char *) &opt,
         sizeof(opt)) < 0)
  {
    kdError() << "setsockopt(SO_KEEPALIVE): " << ERR << "\n";
    return -1;
  }
  chmod(sock, 0600);
  return sockfd;
}
