|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T c
Length: 1157 (0x485) Types: TextFile Names: »connect.c«
└─⟦b20c6495f⟧ Bits:30007238 EUUGD18: Wien-båndet, efterår 1987 └─⟦this⟧ »EUUGD18/General/Hearts/connect.c«
/* * connect.c * * client connection to hearts server */ #include <stdio.h> #include "defs.h" #include "local.h" char *getenv(); /* * Make connection to host running the hearts distributor server, * return fd of new socket. */ connect_to(servhost, port) char *servhost; /* name of host running server */ int port; { int sock; struct hostent *host; struct servent *distributor; struct sockaddr_in sockaddr; char buf[64]; if ((host = gethostbyname(servhost)) == NULL) { perror("gethostbyname"); exit(1); } if ((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0) { perror("socket"); exit(1); } bzero((char *) &sockaddr, sizeof (sockaddr)); bcopy(host->h_addr, (char *) &sockaddr.sin_addr, host->h_length); sockaddr.sin_family = AF_INET; if (port) sockaddr.sin_port = htons(port); else { if ((distributor = getservbyname(SERVICE, PROTO)) == NULL) { (void) sprintf(buf, "%s: service not found\n", SERVICE); fputs(buf, stderr); exit(1); } sockaddr.sin_port = distributor->s_port; } if (connect(sock, (struct sockaddr *) &sockaddr, sizeof(sockaddr)) < 0) { (void) close (sock); return(0); } return(sock); }