CreateWellKnownSockets () { struct sockaddr_in sock_addr; char *name, *localHostname(); if (request_port == 0) return; Debug ("creating socket %d\n", request_port); xdmcpFd = socket (AF_INET, SOCK_DGRAM, 0); if (xdmcpFd == -1) { LogError (ReadCatalog(MC_LOG_SET,MC_LOG_FAIL_SOCK,MC_DEF_LOG_FAIL_SOCK), request_port); return; } name = localHostname (); registerHostname (name, strlen (name)); RegisterCloseOnFork (xdmcpFd); /* zero out the entire structure; this avoids 4.4 incompatibilities */ bzero ((char *) &sock_addr, sizeof (sock_addr)); #ifdef BSD44SOCKETS sock_addr.sin_len = sizeof(sock_addr); #endif sock_addr.sin_family = AF_INET; sock_addr.sin_port = htons ((short) request_port); sock_addr.sin_addr.s_addr = htonl (INADDR_ANY); if (bind (xdmcpFd, (struct sockaddr *)&sock_addr, sizeof (sock_addr)) == -1) { LogError (ReadCatalog(MC_LOG_SET,MC_LOG_ERR_BIND,MC_DEF_LOG_ERR_BIND), request_port, errno); close (xdmcpFd); xdmcpFd = -1; return; } WellKnownSocketsMax = xdmcpFd; FD_SET (xdmcpFd, &WellKnownSocketsMask); chooserFd = socket (AF_INET, SOCK_STREAM, 0); Debug ("Created chooser socket %d\n", chooserFd); if (chooserFd == -1) { LogError ((unsigned char *)"chooser socket creation failed, errno %d\n", errno); return; } listen (chooserFd, 5); if (chooserFd > WellKnownSocketsMax) WellKnownSocketsMax = chooserFd; FD_SET (chooserFd, &WellKnownSocketsMask); }
CreateWellKnownSockets () { struct sockaddr_in sock_addr; char *name, *localHostname(); if (request_port == 0) return; Debug ("creating socket %d\n", request_port); xdmcpFd = socket (AF_INET, SOCK_DGRAM, 0); if (xdmcpFd == -1) { LogError ("socket creation failed\n"); return; } name = localHostname (); registerHostname (name, strlen (name)); RegisterCloseOnFork (xdmcpFd); /* zero out the entire structure; this avoids 4.4 incompatibilities */ bzero ((char *) &sock_addr, sizeof (sock_addr)); sock_addr.sin_family = AF_INET; sock_addr.sin_port = htons ((short) request_port); sock_addr.sin_addr.s_addr = htonl (INADDR_ANY); if (bind (xdmcpFd, &sock_addr, sizeof (sock_addr)) == -1) { LogError ("error binding socket address %d\n", request_port); close (xdmcpFd); xdmcpFd = -1; return; } WellKnownSocketsMax = xdmcpFd; FD_SET (xdmcpFd, &WellKnownSocketsMask); chooserFd = socket (AF_INET, SOCK_STREAM, 0); Debug ("Created chooser socket %d\n", chooserFd); if (chooserFd == -1) { LogError ("chooser socket creation failed\n"); return; } listen (chooserFd, 5); if (chooserFd > WellKnownSocketsMax) WellKnownSocketsMax = chooserFd; FD_SET (chooserFd, &WellKnownSocketsMask); }
CreateWellKnownSockets () { struct t_bind bind_addr; struct netconfig *nconf; struct nd_hostserv service; struct nd_addrlist *servaddrs; char *name, *localHostname(); char bindbuf[15]; int it; if (request_port == 0) return; Debug ("creating UDP stream %d\n", request_port); nconf = getnetconfigent("udp"); if (!nconf) { t_error("getnetconfigent udp"); return; } xdmcpFd = t_open(nconf->nc_device, O_RDWR, NULL); if (xdmcpFd == -1) { LogError ("XDMCP stream creation failed\n"); t_error ("t_open"); return; } name = localHostname (); registerHostname (name, strlen (name)); RegisterCloseOnFork (xdmcpFd); service.h_host = HOST_SELF; sprintf(bindbuf, "%d", request_port); service.h_serv = bindbuf; netdir_getbyname(nconf, &service, &servaddrs); freenetconfigent(nconf); bind_addr.qlen = 5; bind_addr.addr.buf = servaddrs->n_addrs[0].buf; bind_addr.addr.len = servaddrs->n_addrs[0].len; it = t_bind(xdmcpFd, &bind_addr, &bind_addr); netdir_free(servaddrs, ND_ADDRLIST); if (it < 0) { LogError ("error binding STREAMS address %d\n", request_port); t_error("t_bind"); /* also goes to log file */ t_close (xdmcpFd); xdmcpFd = -1; return; } WellKnownSocketsMax = xdmcpFd; FD_SET (xdmcpFd, &WellKnownSocketsMask); chooserFd = t_open ("/dev/tcp", O_RDWR, NULL); Debug ("Created chooser fd %d\n", chooserFd); if (chooserFd == -1) { LogError ("chooser stream creation failed\n"); t_error("t_open chooser"); return; } if (chooserFd > WellKnownSocketsMax) WellKnownSocketsMax = chooserFd; FD_SET (chooserFd, &WellKnownSocketsMask); }