DataMuseum.dk

Presents historical artifacts from the history of:

DKUUG/EUUG Conference tapes

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about DKUUG/EUUG Conference tapes

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download
Index: T c

⟦ed152033f⟧ TextFile

    Length: 1157 (0x485)
    Types: TextFile
    Names: »connect.c«

Derivation

└─⟦b20c6495f⟧ Bits:30007238 EUUGD18: Wien-båndet, efterår 1987
    └─⟦this⟧ »EUUGD18/General/Hearts/connect.c« 

TextFile

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