Mail Archives: cygwin/2003/02/12/11:36:31
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 -