www.delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin/2009/08/13/22:06:05

X-Recipient: archive-cygwin AT delorie DOT com
X-SWARE-Spam-Status: No, hits=-2.0 required=5.0 tests=AWL,BAYES_00
X-Spam-Check-By: sourceware.org
Message-ID: <4A84C671.3050309@sipxx.com>
Date: Thu, 13 Aug 2009 22:05:37 -0400
From: cygwin <karl AT sipxx DOT com>
Reply-To: cygwin AT sipxx DOT com
User-Agent: Thunderbird 2.0.0.22 (Windows/20090605)
MIME-Version: 1.0
To: cygwin AT cygwin DOT com
CC: cygwin AT sipxx DOT com
Subject: Re: Cygwin1.dll 1.7.0-5x: RSYNC failures in close() system call on pipe file descriptors
References: <4A844A97 DOT 1050809 AT sipxx DOT com> <20090813183053 DOT GU13438 AT calimero DOT vinschen DOT de> <4A848D0A DOT 1000900 AT sipxx DOT com> <4A84C48E DOT 9070006 AT sipxx DOT com>
In-Reply-To: <4A84C48E.9070006@sipxx.com>
Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm
List-Id: <cygwin.cygwin.com>
List-Subscribe: <mailto:cygwin-subscribe AT cygwin DOT com>
List-Archive: <http://sourceware.org/ml/cygwin/>
List-Post: <mailto:cygwin AT cygwin DOT com>
List-Help: <mailto:cygwin-help AT cygwin DOT com>, <http://sourceware.org/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

I forgot to add that the same binary copy of the executable of the test 
program (compiled under 1.7) works without error if I place the 
cygwin1.dll version 1.5 into the same directory.


cygwin wrote:
>
> I wrote a small test program to isolate the problem from RSYNC.
> The problem occurs when a file descriptor obtained from socketpair()  
> is dup2()'ed into STDIN and then closed. The close call fails.
> Output from the program is as follows:
>
> socket 1 = 3
> socket 2 = 4
> dup2 socket 1...
> closing socket 1...
> close: Socket operation on non-socket
> closing socket 1 failed
>
>
> It is interesting to note that the close() is successful when the dup2 
> calling sequence is omitted.
> Since socketpair() in cygwin appears to use AF_INET sockets to 
> simulate AF_UNIX it might be interesting to try this on a single INET 
> socket.
>
>
>
> ===============================================
> #include <stdio.h>
> #include <stdlib.h>
> #include <unistd.h>
> #include <sys/socket.h>
>
> main()
> {
>        int fd[2];
>        int res = socketpair(AF_UNIX, SOCK_STREAM, 0, fd);
>        if (res < 0) {
>                perror("socketpair");
>                fprintf(stderr, "socketpair failed\n");
>                exit(1);
>        }
>
>        fprintf(stderr, "socket 1 = %d\n", fd[0]);
>        fprintf(stderr, "socket 2 = %d\n", fd[1]);
>
>        fprintf(stderr, "dup2 socket 1...\n");
>        res = dup2(fd[0], STDIN_FILENO);
>        if (res < 0) {
>                perror("dup2");
>                fprintf(stderr, "dup2 failed\n");
>        }
>
>        fprintf(stderr, "closing socket 1...\n");
>        res = close(fd[0] < 0);
>        if (res < 0) {
>                perror("close");
>                fprintf(stderr, "closing socket 1 failed\n");
>        }
> }
> =====================================================
>


--
Problem reports:       http://cygwin.com/problems.html
FAQ:                   http://cygwin.com/faq/
Documentation:         http://cygwin.com/docs.html
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple

- Raw text -


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