This is the mail archive of the cygwin@sourceware.cygnus.com mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

RE: Socket - connect problem: The descriptor is a file, not a socket


BTW, Peter should put his FD_ZERO/FD_SET inside the loop for best
portability.

Bye, Heribert (heribert_dahms@icon-gmbh.de)

> -----Original Message-----
> From:	Parker, Ron [SMTP:rdparker@butlermfg.com]
> Sent:	Monday, June 05, 2000 19:23
> To:	Peter P. Mooring; 'cygwin@sourceware.cygnus.com'
> Subject:	Socket - connect problem: The descriptor is a file, not
> a socket
> 
> If I had to guess, it sounds your program is somehow calling the
> Microsoft
> WinSock version of select instead of the cygwin one.  If you could
> give the
> actual commands that were used to compile and link it might help.
> 
> (I have included the text of the original message with all of the HTML
> encoding removed, since I know some of the main contributors to this
> list do
> not read HTML mail.)
> 
> -----Original Message-----
> From: Peter P. Mooring [mailto:peterpm@xs4all.nl]
> Sent: Sunday, June 04, 2000 6:05 AM
> To: cygwin@sourceware.cygnus.com
> Subject: Socket - connect problem: The descriptor is a file, not a
> socket
> 
> 
> Hi all,
> For a project I need a small program using a socket to communicate
> with a
> server so I downloaded and installed cygwin/gcc, got an example
> program from
> the net and compiled (and updated in.h and compiled again). No errors.
> When I run the program (on Win98), see below, I get the message 'The
> descriptor is a file, not a socket'. I scanned the mailing lists , and
> the
> net, but am stuck. 
> Please help, thanks,
> Peter
>  
> This is the program, I call it like this 'client 1685 164.139.146.156'
>  
> #include <sys/types.h>
> #include <sys/socket.h>
> #include <sys/time.h>
> #include <netinet/in.h>
> #include <errno.h>
> #include <ctype.h>
> #include <netdb.h>
> #include <stdio.h>
> #include <string.h>
>  
> main(argc, argv)
>  int argc;
>  char *argv[];
>  {
>  
>  struct hostent *hostp;
>  struct servent *servp; 
>  struct sockaddr_in server;
>  int sock; 
>  static struct timeval timeout = { 5, 0 };   /* five seconds */ 
>  fd_set rmask, xmask, mask;
>  char buf[BUFSIZ]; 
>         int nfound, bytesread;
>  
>  if (argc != 3) { 
>   (void) fprintf(stderr,"usage: %s service host\n",argv[0]); 
>   exit(1);
>  } 
>  if ((sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0) { 
>   perror("socket");
>   exit(1);
>  } 
>         if (isdigit(argv[1][0])) {
>   static struct servent s; 
>   servp = &s; 
>   s.s_port = htons((u_short)atoi(argv[1]));
>  } else if ((servp = getservbyname(argv[1], "tcp")) == 0) { 
>   fprintf(stderr,"%s: unknown service\n",argv[1]); 
>   exit(1);
>  } 
>         if ((hostp = gethostbyname(argv[2])) == 0) { 
>   fprintf(stderr,"%s: unknown host\n",argv[2]); 
>   exit(1);
>  } 
>  memset((void *) &server, 0, sizeof server);
>  server.sin_family = AF_INET; 
>  memcpy((void *) &server.sin_addr, hostp->h_addr, hostp->h_length); 
>  server.sin_port = servp->s_port; 
>  if (connect(sock, (struct sockaddr *) &server, sizeof server) < 0) { 
>   (void) close(sock);
>   perror("connect");  
>   exit(1);
>  }
>  FD_ZERO(&mask);  
>  FD_SET(sock, &mask);
>  FD_SET(fileno(stdin), &mask); 
>  for (;;) {
>   rmask = mask; 
>   nfound = select(FD_SETSIZE, &rmask, (fd_set *)0, (fd_set *)0,
> &timeout); 
>   if (nfound < 0) {
>    if (errno == EINTR) { 
>     printf("interrupted system call\n"); 
>     continue;
>    } 
>    /* something is very wrong! */ 
>    perror("select");
>    exit(1); 
>   }
>   if (nfound == 0) { 
>    /* timer expired */ 
>    printf("Please type something!\n"); 
>    continue;
>   } 
>   if (FD_ISSET(fileno(stdin), &rmask)) { 
>    /* data from keyboard */  
>    if (!fgets(buf, sizeof buf, stdin)) {  
>     if (ferror(stdin)) { 
>      perror("stdin"); 
>      exit(1);
>     } 
>     exit(0);
>    } 
>    if (write(sock, buf, strlen(buf)) < 0) { 
>     perror("write");
>     exit(1); 
>    }
>   } 
>   if (FD_ISSET(sock,&rmask)) { 
>    /* data from network */ 
>    bytesread = read(sock, buf, sizeof buf); 
>    buf[bytesread] = '\0'; 
>    printf("%s: got %d bytes: %s\n", argv[0], bytesread, buf); 
>   }
>  }
> } /* main - client.c */
> 
> 
> --
> Want to unsubscribe from this list?
> Send a message to cygwin-unsubscribe@sourceware.cygnus.com

--
Want to unsubscribe from this list?
Send a message to cygwin-unsubscribe@sourceware.cygnus.com


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]