#include #include #include #include #include #include #include #include #define SERVERHOST "f9rt01" /* void init_sockaddr (name, hostname, port) struct sockaddr_in *name; char *hostname; unsigned short int port; { struct hostent *hostinfo; name->sin_family = AF_INET; name->sin_port = htons (port); hostinfo = gethostbyname (SERVERHOST); if (hostinfo == NULL) { fprintf (stderr, "Unknown host %s. \n", hostname); exit (EXIT_FAILURE); } name->sin_addr = *(struct in_addr *) hostinfo->h_addr; } */ /* **- SUBROUTINE CONNECT_RT(SOCK_NUM) */ void connect_rt_ (sock_num) int *sock_num; { int sock, status; unsigned short int port; char cmd; struct sockaddr_in servername; port = (unsigned short int) *sock_num; /* Create the socket */ sock = socket (AF_INET, SOCK_STREAM, 0); if (sock < 0) { perror ("socket (client)"); exit (EXIT_FAILURE); } /* Connect to the server */ init_sockaddr (&servername, SERVERHOST, port); if (0 > connect (sock, (struct sockaddr *) &servername, sizeof (servername))) { perror ("connect (client)"); exit (EXIT_FAILURE); } status = recv (sock, &cmd, 1, 0); if (cmd != 1) { close (sock); fprintf (stderr, "RT busy\n%d", status); exit (EXIT_FAILURE); } *sock_num = sock; } /* **- SUBROUTINE SEND_RT(SOCK_NUM,BUFF,LEN) */ void send_rt_ (sock_num, buff, len) int *sock_num, *len; char *buff; { int status, clen; clen = *len; do { if (0 > (status = write (*sock_num, buff, clen))) { perror ("\nwrite(send_rt)"); exit (EXIT_FAILURE); } clen -= status; buff += status; } while (clen); } /* **- SUBROUTINE RECV_RT(SOCK_NUM,BUFF,LEN) */ void recv_rt_ (sock_num, buff, len) int *sock_num, *len; char *buff; { int status, clen; clen = *len; do { if (0 > (status = read (*sock_num, buff, clen))) { perror ("\nread(recv_rt)"); exit (EXIT_FAILURE); } clen -= status; buff += status; } while (clen); } /* **- SUBROUTINE DISCONNECT_RT(SOCK_NUM) */ void disconnect_rt_ (sock_num) int *sock_num; { int status; char cmd = 0; status = send (*sock_num, &cmd, 1, 0); close (*sock_num); }