#include <sys/types.h>
#include <sys/time.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <stdio.h>
#include <errno.h>
#include "config.h"
#include "comm.h"
static s; /* The main socket. */
/* Kludgy dummy to fool the -g flag to cc ! */
struct object {
int dummy;
};
prepare_ipc(port)
int port;
{
struct sockaddr_in sin;
struct sockaddr_in server;
struct hostent *hp;
hp = gethostbyname(HOST_NAME);
if (hp == 0) {
fprintf(stderr, "rlogin: unknown host.\n");
exit(1);
}
memset((char *)&sin, '\0', sizeof sin);
memcpy((char *)&sin.sin_addr, hp->h_addr, hp->h_length);
sin.sin_port = htons(port);
sin.sin_family = hp->h_addrtype;
s = socket(hp->h_addrtype, SOCK_STREAM, 0);
if (s == -1) {
perror("socket");
abort();
}
server = sin;
if (connect(s, &server, sizeof server) == -1) {
perror("connect");
exit(1);
}
}
send_message(str)
char *str;
{
int res;
res = send(s, str, strlen(str), 0);
if (res == -1) {
if (res == EINTR) {
printf("Command not sent!\n");
return;
}
perror("write socket");
}
}
fd_set readfds;
int nfds = 0;
char *rcv_message() {
static char buffer[MAX_TEXT];
int res;
struct timeval timeout;
#if 0
FD_ZERO(&readfds);
FD_SET(s, &readfds);
nfds = s + 1;
timeout.tv_sec = 0;
timeout.tv_usec = 0;
res = select(nfds, &readfds, 0, 0, &timeout);
if (res == -1) {
if (errno == EINTR)
return 0;
perror("select");
abort();
}
if (res == 0)
return 0;
#endif
res = read(s, buffer, sizeof buffer);
if (res == -1) {
perror("read socket");
abort();
}
buffer[res] = '\0';
return buffer;
}