|
|
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);
}