Hi, all--

Curious if anyone else has seen this problem, or if I'm just doing something wrong. If I compile the following program on cygwin, then it works as expected: I can 'telnet localhost 7227' and see my server there. However, if I compile this program and run it on my i386 pc with an i82559 ethernet adapter, it doesn't work. My target system is at IP address 10.4.0.73, and I can ping that with no problems. But if I 'telnet 10.4.0.73 7227', I get response SYN response packets with RST--implying that the port isn't listening. My target is configured using 'ecosconfig new pc net' with eCos from CVS as of today (4/20). I've not tried this program on eCos before; but if I undefine ECOS_MODE, then it compiles and works under Cygwin as expected. Thanks for your input!

-patrick



#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>

#define ECOS_MODE


#ifdef ECOS_MODE
#include <network.h>
#endif

#define assert(c) \
       if (c) { } else { printf("Assert failed: \"%s\".\n", #c); exit(1); }


int main(void)
{
   int sockfd, newsockfd, portno, clilen;
   char buffer[256];
   struct sockaddr_in serv_addr, cli_addr;
   int n;

   printf("Starting.\n") ;
#ifdef ECOS_MODE
   init_all_network_interfaces() ;
#endif

   sockfd = socket(AF_INET, SOCK_STREAM, 0);
   assert(sockfd >= 0);
   printf("sockfd=%d.\n", sockfd) ;

   bzero((char *) &serv_addr, sizeof(serv_addr));
   portno = 7227 ;
   serv_addr.sin_family = AF_INET;
   serv_addr.sin_addr.s_addr = INADDR_ANY;
   serv_addr.sin_port = htons(portno);
int r = bind(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) ;
   printf("bind returned %d.\n", r) ;
   assert(r >= 0) ;

   r = listen(sockfd, 5);
   printf("listen returned %d.\n", r) ;

   while (1)
   {
       printf("Ready on port %d.\n", portno) ;

       clilen = sizeof(cli_addr);
       bzero((char *) &cli_addr, sizeof(cli_addr));
       newsockfd = accept(sockfd, (struct sockaddr *) &cli_addr, &clilen);
       printf("Accept newsockfd=%d.\n", newsockfd) ;
       assert(newsockfd >= 0) ;

       bzero(buffer,256);
       n = read(newsockfd,buffer,255);
       printf("Read %d bytes.\n", n);
       assert(n >= 0) ;
       printf("Received: \"%*.*s\"\n", n, n, buffer);

       n = write(newsockfd,"I got your message",18);
       printf("Write wrote %d bytes.\n", n) ;
       assert(n >= 0) ;
       close(newsockfd) ;
   }
   return 0;
}


--
Before posting, please read the FAQ: http://ecos.sourceware.org/fom/ecos
and search the list archive: http://ecos.sourceware.org/ml/ecos-discuss

Reply via email to