Path: utzoo!utgpu!news-server.csri.toronto.edu!cs.utexas.edu!yale!cmcl2!adm!news From: pspinler@att1.mankato.msus.edu (Patrick J. Spinler) Newsgroups: comp.unix.wizards Subject: question about using sockets on sysVr3 Message-ID: <23856@adm.BRL.MIL> Date: 11 Jul 90 04:52:48 GMT Sender: news@adm.BRL.MIL Lines: 141 I am attempting to learn to use sockets, however, I am evidently creating a protocal error of some sort, and have no real idea where to start looking. If some kind soul would please tell me why I'm getting an EINVAL error on my call to bind(), I would be very grateful. I'm running sysVr3.1.1 on an at&t 3b2/500 with the WINS tcp/ip and wollengang socket emulation library installed. Please email replys, and thanks very much ! -- Pat --- cut here --- #include /* obligatory includes */ #include #include #include #include #include #include #include #include #define MAXHOSTNAME 32 #define PORTNUM 4594 main () { int sock_fds, pid, fds, size; struct sockaddr_in sock_add; struct sockaddr_in connect_add; struct hostent *host; short portnum; char hostname[MAXHOSTNAME+1], buffer[80]; bzero (&sock_add, sizeof (sock_add)); gethostname (hostname, MAXHOSTNAME); host = gethostbyname (hostname); if (!host) { perror ("getbyhostname"); exit (1); } if (host->h_addrtype != AF_INET) { perror ("host in wrong address family"); exit (1); } /* * create the socket ! */ sock_fds = socket (AF_INET, SOCK_STREAM, 0); if (sock_fds < 0) { perror ("socket"); exit (1); } pid = fork (); if (pid < 0) { perror ("fork"); close (sock_fds); exit (1); } if (pid) { /* Parent process -- server */ /* * Name the socket */ bzero (&sock_add, sizeof (sock_add)); sock_add.sin_family = AF_INET; bcopy (host->h_addr, &sock_add.sin_addr, host->h_length); sock_add.sin_port = htons ((unsigned short) PORTNUM); if (bind (sock_fds, &sock_add, sizeof (sock_add))) { perror ("bind"); close (sock_fds); exit (1); } size = sizeof (sock_add); if (getsockname (sock_fds, &sock_add, &size)) { perror ("getsockname"); close (sock_fds); exit (1); } sprintf (buffer, "Port #%d\n", ntohs (sock_add.sin_port)); write (1, buffer, strlen (buffer)); listen (sock_fds, 1); size = sizeof (connect_add); fds = accept (sock_fds, &connect_add, &size); if (fds < 0) { perror ("accept"); close (sock_fds); exit (1); } while ((size = read (fds, buffer, 79))) { write (1, buffer, size); } close (fds); close (sock_fds); exit (0); } else { /* child */ /* * Name the socket */ bzero (&sock_add, sizeof (sock_add)); sock_add.sin_family = AF_INET; bcopy (host->h_addr, &sock_add.sin_addr, host->h_length); sock_add.sin_port = htons ((unsigned short) PORTNUM); if (connect (sock_fds, &sock_add, sizeof (sock_add)) < 0) { perror ("connect"); close (sock_fds); exit (1); } sprintf (buffer, "connected to port #%d\n", ntohs (sock_add.sin_port)); write (1, buffer, strlen (buffer)); strcpy (buffer, "Hi, this is a test !"); size = strlen (buffer); write (sock_fds, buffer, size); close (sock_fds); exit (0); } } ---- Patrick J. Spinler PSPinler@att1.Mankato.MSUS.EDU Student Programmer PSPinler@vax1.Mankato.MSUS.EDU Mankato State University PSPinler@msus1.MSUS.EDU