2 tcp.c - Routines to give us handles to tcp ports.
3 Copyright 1999 Project Purple. Written by Jonathan McDowell
5 27/11/1999 - Started writing.
10 #include <sys/socket.h>
12 #include <netinet/in.h>
16 int opensock(char *host, int port)
19 struct sockaddr_in saddr;
20 struct hostent *hoste;
22 if ((hoste=gethostbyname(host))==NULL) {
23 perror("gethostbyname()");
27 if ((sock=socket(AF_INET, SOCK_STREAM, 0))==-1) {
32 saddr.sin_addr = *(struct in_addr *) hoste->h_addr;
33 saddr.sin_family = AF_INET;
34 saddr.sin_port = htons(port);
36 if ((connect(sock, (struct sockaddr *) &saddr, sizeof(struct sockaddr_in)))==-1) {
41 if (fcntl(sock, F_SETFL, O_NONBLOCK)==-1) {
49 int listensock(int port)
52 struct sockaddr_in saddr;
56 if ((sock=socket(AF_INET, SOCK_STREAM, 0))==-1) {
62 if (setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on))) {
63 perror("setsockopt(SO_REUSEADDR)");
67 saddr.sin_addr.s_addr = INADDR_ANY;
68 saddr.sin_family = AF_INET;
69 saddr.sin_port = htons(port);
70 saddrlen = sizeof(saddr);
72 if (bind(sock, (struct sockaddr *) &saddr, saddrlen)==-1) {
77 if (listen(sock, 0)==-1) {
82 if ((newsock=accept(sock, (struct sockaddr *) &saddr, &saddrlen))==-1) {
87 if (fcntl(newsock, F_SETFL, O_NONBLOCK)==-1) {