summaryrefslogtreecommitdiff
path: root/other/telnetfp-0.1.2/base_net.cpp
blob: 06359859575e224568ad1035eb7e921842a7cd2f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
class tcp_socket
{
  private:
  int sock;

  public:

  int sopen (char *host, int port)
  {
    int x = -1;
    struct hostent *foo = NULL;
    struct sockaddr_in addr;

    memset ((struct sockaddr_in *) &addr, 0, sizeof (struct sockaddr_in));

    if ((addr.sin_addr.s_addr = inet_addr (host)) == -1)
      {
	if ((foo = gethostbyname (host)) == NULL)
	  return -2;
	addr.sin_addr.s_addr = *(unsigned long *) (foo->h_addr_list[0]);
      }
    addr.sin_family = PF_INET;
    addr.sin_port = htons (port);
    sock = socket (PF_INET, SOCK_STREAM, IPPROTO_TCP);

    x = connect (sock, (struct sockaddr *) &addr, sizeof (struct sockaddr_in));
    if (x != 0 || sock < 0)
      return -1;

    return 0;
  }


  char *sread (int x)
  {
    char *y = NULL;
    y = (char *) malloc (x + 1);
    memset (y, 0x00, x + 1);
    if (read (sock, y, x) < 1)
      {
	free (y);
	return NULL;
      } 
    return y;
  }


  int swrite (char *x)
  {
    return write (sock, x, strlen (x));
  }


  void sclose ()
  {
    close (sock);
  }


  void
  init ()
  {
    sock = 0;
  }
};