delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin/2003/02/12/11:36:31

Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm
List-Subscribe: <mailto:cygwin-subscribe AT cygwin DOT com>
List-Archive: <http://sources.redhat.com/ml/cygwin/>
List-Post: <mailto:cygwin AT cygwin DOT com>
List-Help: <mailto:cygwin-help AT cygwin DOT com>, <http://sources.redhat.com/ml/#faqs>
Sender: cygwin-owner AT cygwin DOT com
Mail-Followup-To: cygwin AT cygwin DOT com
Delivered-To: mailing list cygwin AT cygwin DOT com
Date: Wed, 12 Feb 2003 17:39:55 +0100 (CET)
From: Pavel Tsekov <ptsekov AT gmx DOT net>
X-X-Sender: ptsekov AT moria DOT atlanticsky DOT com
To: Henry <is01oly AT taurus DOT zsu DOT edu DOT cn>
cc: cygwin AT cygwin DOT com
Subject: Re: Problem with socket in gcc programming
In-Reply-To: <200302121606.h1CG6OJ28157@zsulink.zsu.edu.cn>
Message-ID: <Pine.LNX.4.44.0302121728470.13863-100000@moria.atlanticsky.com>
MIME-Version: 1.0

Hello,

Works fine here. I'm running your testcase on:

$ uname -a
CYGWIN_NT-5.0 mordor 1.3.20(0.73/3/2) 2003-02-08 12:10 i686 unknown 
unknown Cygwin

It will help if you provide more infomation about your system environment 
and the version of Cygwin that you are running. To learn how to do this
take a look at http://www.cygwin.com/bugs.html, the section named 'Bug 
reporting guidelines'. 

On Thu, 13 Feb 2003, Henry wrote:

> This is a demo program to issue my problem i'm facing to.
> #include <stdio.h>
> #include <sys/socket.h>
> #include <netinet/in.h>
> 
> int main(int argc, char *argv[]) {
> 	    int sockfd, accefd, rsinlen, on = 1;
> 	    pid_t pid;
> 	    struct sockaddr_in sin, rsin;
> 	    unsigned long waittime;
> 
> 	    if (fork()) exit(0);
>  
>  		sockfd = socket(PF_INET, SOCK_STREAM, 0);
> 	    setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on));
> 	    memset(&sin, 0, sizeof(struct sockaddr));
> 	    rsinlen = sizeof(struct sockaddr);
> 	    sin.sin_family = AF_INET;
> 	    sin.sin_port = htons(80);
> 	    sin.sin_addr.s_addr = INADDR_ANY;
>         bind(sockfd, (struct sockaddr *)&sin, sizeof(struct sockaddr));
>         listen(sockfd, 256);
>         while (1) {
>                 accefd = accept(sockfd, (struct sockaddr *)&rsin, &rsinlen);
>                 if (accefd >= 0) {
>                         pid = fork();
>                         if (pid < 0) {
>                                 printf("Parent: fork error\n");
>                                 close(accefd);
>                                 continue;
>                         }
>                         if (pid == 0) {
>                                 close(sockfd);
>                                 //close(accefd);
> 		/* in my test, althought I add this line the second time,
> 			it ran into the same situation */
>                                 process(accefd);
>                                 printf("Child return to parent\n");
>                                 close(accefd);
>                                 exit(0);
>                         } else {
>                                 waitpid(pid, NULL, 0);
>                                 printf("Parent exiting\n");
>                                 close(accefd);
>                                 exit(0);
>                         }
>                 }
>         }
>         return 0;
> }
> 
> int process(int fd) {
>         int i;
> 
>         printf("Child start\n");
>         close(fd);
>         printf("fd %d closed\n", fd);
> 
>         if (fork() > 0)
>                 return 0;
>         printf("in grandchild, infinite loop\n");
> 		while (1) ;
> }
> 
> While I compile and run this program in cygwin with gcc, and then telnet to 80 port, my telnet client can't disconnect and I have to use ^] to terminate. The same program tested in FreeBSD 5.0RC2, and got the following result.
> 
> su-2.05b# ./test
> su-2.05b# telnet localhost 80
> Trying 127.0.0.1...
> Connected to localhost.
> Escape character is '^]'.
> Child start
> accept fd closed
> Child return to parent
> Parent exiting
> in grandchild, infinite loop
> Connection closed by foreign host.
> 
> The socket was closed automatively.
> 
> I'm wondering whether I dismissed something or this is a bug in cygwin. I spent hours in google and find many bugs description, but none of them is familiar with my problem.
> 
> My cygwin version is 2.194.2.24.


--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Bug reporting:         http://cygwin.com/bugs.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019